requests-html 选择元素出现乱码


#requests-html 选择元素出现乱码(css选择或xpath选择均出现乱码,该网站的其他多数网页,正常不出现乱码),代码如下:

import pandas as pd
from requests_html import HTMLSession

session = HTMLSession()
session.encoding = 'utf-8'
url = 'http://ggzyjy.linyi.gov.cn/linyi/jyxx/012003/012003001/20170522/7119052f-0f87-481c-b77c-fe3f6e28f20c.html'
obj_t = session.get(url)

doc = obj_t.html.xpath("//div[@class='ewb-article-info']",first=True)#
doc1 = obj_t.html.find('div.ewb-article-info', first=True)

print(obj_t.html.text)#正常,无乱码
print(doc.text)#该处出现乱码
print(doc.html)#正常,无乱码
print(doc1.html)#正常,无乱码
print(doc1.text)#该处出现乱码



访问属性text时,会返回一个unicode对象,乱码问题就会常常发成在这里。
参考试试: https://blog.csdn.net/xc_zhou/article/details/80893315?utm_source=app&app_version=4.12.0 https://blog.csdn.net/xc_zhou/article/details/80893315?utm_source=app&app_version=4.12.0

requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。请求发出后,requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问doc1.text 之时,requests 会使用其推测的文本编码。你可以找出 requests 使用了什么编码,并且能够使用 doc1.encoding 属性来改变它.
但是requests库的自身编码为:doc1.encoding = ‘ISO-8859-1’
所以在print上面添加
doc.encoding='utf-8'
doc1.encoding='utf-8'
试试看吧