检索Xpath文本时,编码UTF-8不起作用

时间:2018-08-30 16:20:33

标签: python unicode encoding

我正在通过lxml xpath从某个网站检索某个日期:

page = requests.get(url)

tree = html.fromstring(page.content)

titles_arr = tree.xpath("//span[@class='lister-item-header']/span/a/text()")

有些标题带有德国Umlaute(例如üöä),因此我想到了对返回的文本进行编码,如下所示:

for title in titles_arr:
    title = title.encode('utf-8')

,但它仍由Der Herr der Ringe - Die R\u00fcckkehr des K\u00f6nigs组成,而不是它们各自的unicode字符。我在做什么错了?

谢谢

1 个答案:

答案 0 :(得分:0)

您似乎正在处理用转义的Unicode字符编码的字节串。

您可以这样解码:

>>> bs = b'Die R\u00fcckkehr des K\u00f6nigs'
>>> bs.decode('raw-unicode-escape')
'Die Rückkehr des Königs'

如果要处理文本而不是字节,则需要先编码然后解码:

>>> s = 'Die R\u00fcckkehr des K\u00f6nigs'                                                                                                                                                                                               
>>> s.encode('latin-1').decode('raw-unicode-escape')                                                                           
'Die Rückkehr des Königs' 

这种编码用于转义json中的unicode字符,以将json限制为ascii值:

>>> json.dumps('Die Rückkehr des Königs')
'"Die R\\u00fcckkehr des K\\u00f6nigs"'   

因此,无论您要获取的URL是带有嵌入式json的html还是带有嵌入式html的json-都值得检查响应的json属性。