这个问题在这里已经有答案了:

我想使用简单的 python 正则表达式从足球网页上抓取一些信息。问题是,像第一小伙子艾里塔洛这样的玩家,最终都是艾里塔洛!
也就是说,html 对特殊字符使用转义标记,例如 Ä

有没有一种简单的方法将 html 读入正确的 python 字符串?如果它是 XML/XHTML 那就很容易了,解析器会做到这一点。

有帮助吗?

解决方案

我会推荐 美丽汤 用于 HTML 抓取。您还需要告诉它将 HTML 实体转换为相应的 Unicode 字符,如下所示:

>>> from BeautifulSoup import BeautifulSoup    
>>> html = "<html>&#196;&#196;RITALO!</html>"
>>> soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES)
>>> print soup.contents[0].string
ÄÄRITALO!

(如果标准的话就好了 编解码器 模块包含一个编解码器,这样你就可以这样做 "some_string".decode('html_entities') 但不幸的是事实并非如此!)

编辑:另一个解决方案:Python 开发人员 Fredrik Lundh(elementtree 的作者等) 取消 HTML 实体安全的函数 在他的网站上,它适用于十进制、十六进制和命名实体(BeautifulSoup 不适用于十六进制实体)。

其他提示

尝试使用 美丽汤. 。它应该可以解决问题,并为您提供一个格式良好的 DOM 来使用。

这个博客 条目似乎取得了一些成功。

我自己没试过,但你试过吗

http://zesty.ca/python/scrape.html ?

它似乎有一个方法 htmldecode(text) 可以做你想要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top