从网页获取国际字符?

时间:2008-09-10 00:30:43

标签: python html parsing unicode

我想使用简单的python regexp从足球(足球)网页上抓取一些信息。问题在于,像第一章“ÄRITALO”这样的球员出现了ÄÄ RITALO!
也就是说,html对特殊字符使用转义标记,例如Ä

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

3 个答案:

答案 0 :(得分: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!

(如果标准codecs模块包含一个编解码器,这样会很好,这样你就可以"some_string".decode('html_entities'),但不幸的是它没有!)

修改 另一种方案: Python开发人员Fredrik Lundh(elementtree的作者,除其他外)在他的网站上有a function to unsecape HTML entities,它与十进制,十六进制和命名实体一起使用(BeautifulSoup不适用于十六进制实体)。

答案 1 :(得分:2)

尝试使用BeautifulSoup。它应该做的伎俩,并为您提供一个格式良好的DOM。

This blog条目似乎取得了一些成功。

答案 2 :(得分:0)

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

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

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