我正在尝试使用lxml.html解析Python中的html页面。
我使用了以下代码:
import lxml.html as H
page = open('page.html', 'r').read()
doc = H.fromstring(page)
print H.tostring(doc)
page.html是我用我之前编写的代理程序下载的网页,其中有一些关于使用代理和编码传输的工作。文件的编码已更改为utf-8,而页面中的charset声明如下:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
btw,gb2312是一种中文字符集。
首先,我运行了上面的python代码,但它只打印了一个空的html结构,这是错误的而不是我想要的。
我尝试了一些方法,最后我发现问题发生是因为charset声明:当我用空字符串替换'charset = gb2312'时,解析代码按照我的预期工作。
但我不太明白为什么会这样。我解决问题的方法是正确的方法还是巧合?
答案 0 :(得分:2)
http://lxml.de/parsing.html#python-unicode-strings说:
您通常应该避免转换 之前要进行unicode的XML / HTML数据 将它传递给解析器。它是 既慢又容易出错。