7

我想使用简单的 python 正则表达式从足球(足球)网页上刮下一些信息。问题是,像第一小伙 ÄÄRITALO 这样的球员,以 ÄÄRITALO 的形式出现!
即 html 对特殊字符使用转义标记,例如 Ä

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

4

3 回答 3

7

我会推荐BeautifulSoup用于 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 不适用于十六进制的实体)。

于 2008-09-10T00:50:19.747 回答
2

尝试使用BeautifulSoup。它应该可以解决问题,并为您提供格式良好的 DOM 以供使用。

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

于 2008-09-10T00:48:19.893 回答
0

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

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

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

于 2008-09-10T00:32:23.987 回答