最近使用python抓取网页分析html元素数据时,使用lxml库下etree类tostring()方法获取指定元素的html代码,发现输出的结果中汉字部分显示不正常,形如 年,使用html类下tostring()方法是一样的情况。经过查找得知汉字被转换为对应的html字符实体。有下面几种方法解决

(1)、使用html库下unescape()函数帮字符串中html字符实体转换为对应的字符,如汉字等

(2)、通过分析etree的源码,发现 etree类还有 tounicode()方法,使用这个方法获取,能正常显示汉字

(3)、通过分析etree的源码,发现tostring()方法,有 encoding参数值控制汉字是否转换为对应html字符实体,encoding="unicode"设定这个值,返回的是unicode字符串。

下面是示例代码:

from lxml import etree
import requests
import html

url = 'http://www.phper163.com/aboutus'
res = requests.get(url).text
doc = etree.HTML(res)
postbody = doc.xpath("//div[@class='post-body']")[0]
postbody_text = etree.tostring(postbody)
print(postbody_text) #输出时中文显示的是对应的html字符实体,形式如 年
postbody_text2 = etree.tostring(postbody,encoding="unicode")
postbody_text3 = etree.tounicode(postbody)
print(postbody_text2,postbody_text3) #这两个变量能正常显示汉字
postbody_text4=html.unescape(postbody_text.decode())
print(postbody_text4) #此时输出的能正常显示汉字


点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
返回
顶部