我试图使用lxml模块来解析HTML文件,但是我很难让它处理一些UTF-8编码的数据。我在Windows上使用python2.7。例如,考虑一个没有字节顺序标记的UTF-8编码文件,它只包含文本字符串Québec
。如果我只是使用常规文件处理程序读取文件的内容并对结果string对象进行解码,那么我会得到一个长度为6unicode的字符串,当写回文件时,这个字符串看起来很不错。但是如果我用lxml解析这个文件,我会看到一个长度为7的unicode字符串,当写回一个文件时,这个字符串看起来很奇怪。有人能解释一下lxml的不同之处以及如何获得原始的漂亮字符串吗?在
例如:
import lxml.html as html
from lxml import etree
f = open("output.txt", "w")
text = open("input.txt").read().decode("utf-8")
f.write("String of type '%s' with length %d: %s\n" % (type(text), len(text), text.encode("utf-8")))
root = html.parse("input.txt")
text = root.xpath(".//p")[0].text.strip()
f.write("String of type '%s' with length %d: %s\n" % (type(text), len(text), text.encode("utf-8")))
在output.txt
中生成输出:
编辑
这里的部分解决方法似乎是使用以下方法解析文件:
etree.parse("input.txt", etree.HTMLParser(encoding="utf-8"))
或者
html.parse("input.txt", etree.HTMLParser(encoding="utf-8"))
然而,据我所知,基本etree库缺少一些用于选择器之类的便利类,因此一个允许我使用的解决方案lxml.html没有etree.HTMLParser()还是有用的。在
函数
lxml.html.parse
已经使用了lxml.html.HTMLParser,所以你不应该真的反对使用处理utf-8数据
相关问题 更多 >
编程相关推荐