关于使用lxml.html解析HTML的字符集问题

1 投票
1 回答
1341 浏览
提问于 2025-04-16 10:26

我一直在用Python的lxml.html库解析一个HTML页面。

我用了下面的代码:

import lxml.html as H
page = open('page.html', 'r').read()
doc = H.fromstring(page)
print H.tostring(doc)

这个page.html是我之前用一个代理程序下载的网页,这个程序做了一些关于代理和编码转换的工作。这个文件的编码已经改成了utf-8,但页面里的字符集声明是这样的:

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

顺便说一下,gb2312是一种中文字符集。

一开始,我运行了上面的Python代码,但它只打印出一个空的HTML结构,这显然是错误的,不是我想要的结果。

我尝试了几种方法,最后发现问题出在字符集声明上:当我把'charset=gb2312'替换成一个空字符串时,解析代码就像我预期的那样正常工作了。

不过我不太明白为什么会这样。我的解决方法是对的,还是只是碰巧呢?

1 个回答

2

在这个链接中提到:

一般来说,你应该避免在把XML或HTML数据传给解析器之前,先把它转换成unicode格式。这样做会比较慢,而且容易出错。

撰写回答