2008-09-10 106 views
6

我想使用簡單的python regexp從足球(足球)網頁上刮掉一些信息。問題在於像第一個球員ÄRITALO這樣的球員出現在Ä Ä RITALO!
也就是說,html使用特殊字符的轉義標記,如Ä從網頁獲取國際字符?

是否有一種簡單的方法將html讀入正確的python字符串?如果它是XML/XHTML,那很容易,解析器會這樣做。

回答

7

我會爲HTML抓取推薦BeautifulSoup。您還需要告訴它的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開發弗雷德裏克Lundh開發(ElementTree的作者,除其他事項外)在他的網站上,十進制,十六進制和命名實體工程a function to unsecape HTML entities(BeautifulSoup會不適用於十六進制)。

2

嘗試使用BeautifulSoup。它應該做的伎倆,並給你一個很好格式化的DOM以及使用。

This blog入口似乎已經取得了一些成功。