【问题标题】:Encode UTF-8 not working when retrieving Xpath text检索 Xpath 文本时编码 UTF-8 不起作用
【发布时间】:2018-08-30 16:20:33
【问题描述】:

我正在通过 lxml xpath 从网站检索一些日期:

page = requests.get(url)

tree = html.fromstring(page.content)

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

有些标题有德语变音符号(例如üöä),所以我想像这样对返回的文本进行编码:

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

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

谢谢

【问题讨论】:

  • 对我来说,似乎不清楚treexpath 是什么。它是什么图书馆?似乎有几个库具有 xpath 方法...不是 minimal reproducible example
  • @AndreyTyukin 使用 lxml
  • 您究竟是如何获得该输出的……?
  • @deceze 请求模块

标签: python unicode encoding


【解决方案1】:

您似乎正在处理使用转义的 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 属性。

【讨论】:

  • 感谢您的回答,但它似乎不起作用。你的两种方法我都试过了,都不行。我正在遍历列表并执行encode('latin-1').decode('raw-unicode-escape'),它使用\u00fc\u00f6 转储JSON。
  • @supersize 您要获取的网址是什么? Python2 还是 Python3?
  • https://www.imdb.com/search/title?groups=top_1000&sort=user_rating&view=simple&page=1请注意,这个链接根据你所在的国家可能会有不同的内容。所以可能是你没有üöä,Python2
  • 我可以使用page = requests.get(url, headers={'Accept-Language': 'de-DE'}) 检索德语文本。响应具有内容语言'de-DE',内容类型'text/html;charset=UTF-8'。在解释器中运行您的示例代码,我看到每个标题的repr 的十六进制转义(Die R\xfcckkehr des K\xf6nigs),如果printed,则为预期值(Die Rückkehr des Königs)。 Python 2.7.14,请求 2.19.1,lxmll 4.2.4,Linux。
  • 那你在告诉我什么,对不起?
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多