2008-09-01 24 views
15

因爲正則表達式嚇唬我,我試圖找到一種方法,從Python中的字符串中刪除所有的HTML標籤和解決HTML實體。過濾掉HTML標籤和蟒蛇解決實體

+0

實際上鍊接深入Python應該是[這](HTTP:// diveintopython的。org/html_processing/index.html) – 2008-09-02 09:54:12

回答

39

使用lxml這是蟒蛇最好的XML/HTML庫。

import lxml.html 
t = lxml.html.fromstring("...") 
t.text_content() 

如果你只是想消毒HTML看看lxml.html.clean module

6

描述雖然我與盧卡斯同意,正則表達式是不是所有的嚇人,我還以爲你應該用專門的HTML解析器去的作者。這是因爲HTML標準足夠大(特別是如果你想任意解析從互聯網上取下的「HTML」頁面),你需要編寫大量的代碼來處理角落案例。看來python includes one out of the box

您也應該檢查python bindings for TidyLib可以清理破碎的HTML,使得任何HTML解析更高的成功率。

1

您可能需要比正則表達式更復雜的東西。網頁通常有尖括號不屬於標籤的一部分,就像這樣:

<div>5 < 7</div> 

剝離與正則表達式的標籤將返回字符串「5」和治療

< 7</div> 

爲單一標籤並將其剝離。

我建議尋找已經編寫的代碼,這是否適合你。我做了一個搜索,發現這個:http://zesty.ca/python/scrape.html它也可以解析HTML實體。

15

使用BeautifulSoup!這對你來說是完美的,你有可靠的美德標記,需要從中得到合理的東西。只需傳入原始文本,提取所有字符串標籤並加入即可。

+9

,代碼如下:''.join(BeautifulSoup(value,convertEntities = BeautifulSoup.HTML_ENTITIES).findAll(text = True)) – 2011-01-03 20:23:29

0

正則表達式是不可怕的,但寫自己的正則表達式剝離HTML是到了瘋狂的可靠路徑(並且它也行不通)。遵循智慧之路,並使用許多優秀的HTML解析庫之一。

Lucas的例子也被打破,因爲‘子’不是Python字符串的方法。你必須「導入re」,然後調用re.sub(pattern,repl,string)。但是這並不是那裏,因爲你的問題的正確答案不涉及寫任何正則表達式。

0

望着感的人的數量都在這裏展示在其他的答案,我會說,可能使用正則表達式是不是適合自己情況的最好的主意。去的東西嘗試和測試,並把我以前的答案的示威,正則表達式不必嚇人。

如果使用