最近使用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) #此时输出的能正常显示汉字
发表评论 取消回复