我想使用简单的 python 正则表达式从足球(足球)网页上刮下一些信息。问题是,像第一小伙 ÄÄRITALO 这样的球员,以 ÄÄRITALO 的形式出现!
即 html 对特殊字符使用转义标记,例如 Ä
有没有一种简单的方法可以将 html 读入正确的 python 字符串?如果它是 XML/XHTML,它会很容易,解析器会这样做。
我会推荐BeautifulSoup用于 HTML 抓取。您还需要告诉它将 HTML 实体转换为相应的 Unicode 字符,如下所示:
>>> from BeautifulSoup import BeautifulSoup
>>> html = "<html>ÄÄ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 不适用于十六进制的实体)。
尝试使用BeautifulSoup。它应该可以解决问题,并为您提供格式良好的 DOM 以供使用。
这个博客条目似乎已经取得了一些成功。