从html meta标签确定charset w / python

时间:2011-02-15 09:08:22

标签: python html python-3.x html-parsing

我有一个脚本需要在被lxml.HTML()读取之前确定字符集以进行解析。我将假设ISO-8859-1(这是正常的假设charset这个权利?)如果找不到它并使用charset属性在html中搜索元标记。但是我不确定最好的方法。我可以尝试使用lxml创建一个etree,但我不想读取整个文件,因为我可能会遇到编码问题。但是,如果我不读取整个文件,我就无法构建一个etree,因为某些标签不会被关闭。

我是否应该找到带有一些花哨的字符串下标的元标记,并在找到它或读取了一定数量的行后突破循环?也许使用低级HTML解析器,例如html.parser?使用python3 btw,谢谢。

2 个答案:

答案 0 :(得分:3)

您应该首先尝试从HTTP标头中提取编码。如果它不存在,你应该用lxml解析它。这可能很棘手,因为如果charset不匹配,lxml会抛出解析错误。解决方法是解码和编码忽略未知字符的数据。

html_data=html_data.decode("UTF-8","ignore")
html_data=html_data.encode("UTF-8","ignore")

在此之后,您可以通过使用lxml.HTML()编码调用utf-8命令来解析。 这样,您就可以找到HTML标头中定义的正确编码。

找到编码后,您必须使用正确的编码重新解析HTML文档。

不幸的是,有时即使在HTML标题中也可能找不到字符编码。我建议您使用chardet模块,只有在这些步骤失败后才能找到正确的编码。

答案 1 :(得分:3)

正确确定HTML文件的字符编码实际上是一件非常复杂的事情,但HTML5规范确切地定义了处理器应该如何做。您可以在此处找到算法:http://dev.w3.org/html5/spec/parsing.html#determining-the-character-encoding