Dav*_*542 4 python unicode lxml
我试图解析HTML,但遗憾的lxml是不允许我抓取实际文本:
node = lxml.html.fromstring(r.content)
self.fingerprint['Title'] = node.cssselect('.document-title div')[0].text
print '@@####', self.fingerprint['Title']
# @@#### Démineurs
Run Code Online (Sandbox Code Playgroud)
要正确解析此文本,我需要做什么?以下是网页:https://play.google.com/store/movies/details/D%C3%A9mineurs? id = KChu8wf5eVo &hl = fr,文字应为Démineurs.
该文档没有编码信息,因此您需要创建一个默认使用正确编码的解析器.
>>> lxml.html.fromstring('<p>é</p>').text
u'\xc3\xa9'
>>> hp = lxml.etree.HTMLParser(encoding='utf-8')
>>> lxml.html.fromstring('<p>é</p>', parser=hp).text
u'\xe9'
Run Code Online (Sandbox Code Playgroud)
这只是一个编码问题。
看起来您正在使用requests,这很好,因为它为您完成了这项工作。
首先,请求猜测编码,您可以使用r.encoding. 对于该页面,请求猜测为 utf-8。
你可以这样做:
data = r.content.decode('UTF-8')
# or
data = r.content.decode(r.encoding)
# then
node = lxml.html.fromstring(data)
self.fingerprint['Title'] = node.cssselect('.document-title div')[0].text
print '@@####', self.fingerprint['Title']
Run Code Online (Sandbox Code Playgroud)
哪个有效:
@@#### Démineurs
Run Code Online (Sandbox Code Playgroud)
但更好的是,只需使用text已正确解码输出的属性。
node = lxml.html.fromstring(r.text)
self.fingerprint['Title'] = node.cssselect('.document-title div')[0].text
print '@@####', self.fingerprint['Title']
Run Code Online (Sandbox Code Playgroud)
作品:
@@#### Démineurs
Run Code Online (Sandbox Code Playgroud)