如何告诉lxml使用哪个charset?

时间:2015-06-27 22:27:15

标签: python lxml

我正在使用html并使用lxml来解析它。出于测试目的,我将一个html文档保存为python文件中的字符串,顶部有encoding = utf-8。

每当我尝试使用lxml解析html时,如果html没有<meta charset="utf-8">标记,我会得到奇怪的html编码。

这是代码:

t = lxml.html.fromstring(page_html)
print lxml.html.tostring(t)

如果page_html字符串包含上面的元字符集,tostring()方法会返回编码良好的html(即变成&#8217;)。如果没有,结果会出现乱码(即变为&#226;&#128;&#153;

这种编码发生在fromstring方法而不是tostring方法中,所以我不能在树创建之后在树中插入新元元素,因为那时它是晚。

我能想到的唯一解决方案是尝试修改原始的html字符串,并在创建树之前添加元标记。这看起来有点笨拙。是不是有更好的方法来使用lxml?

1 个答案:

答案 0 :(得分:0)

结果我只需要将自定义解析器传递给fromstring方法。所以这解决了它:

parser = html.HTMLParser(encoding="utf-8")
t = lxml.html.fromstring(page_html, parser=parser)
print lxml.html.tostring(t)