2013-04-09 73 views
5

我一直在閱讀很多關於如何使用python從字符串中刪除所有的html代碼,但沒有一個令人滿意。我需要一種方法來刪除所有標記,保存/轉換html實體,並使用utf-8字符串很好地工作。安全地從Python中的字符串中刪除所有的HTML代碼

顯然BeautifulSoup很容易受到一些特製的HTML字符串,我建有HTMLParser的一個簡單的解析器得到公正的文本,但我失去了實體

from HTMLParser import HTMLParser 

class MyHTMLParser(HTMLParser): 
    def __init__(self): 
     HTMLParser.__init__(self) 
     self.data = [] 

    def handle_data(self, data): 
     self.data.append(data) 

    def handle_charref(self, name): 
     self.data.append(name) 

    def handle_entityref(self, ent): 
     self.data.append(ent) 

讓我像

[u'Asia,sp',u'cialiste du voyage',...

丟失spécialiste中重音符號「e」的實體。

使用許多正則表達式中的一個,你可以找到答案類似的問題,它總是會有一些沒有考慮到的邊緣情況。

有沒有我可以使用的真正好的模塊?

回答

4

bleach非常適合這項工作。它可以滿足您的一切需求。它有一個廣泛的測試套件,用於檢查標籤可能滑過的奇怪邊緣情況。我從來沒有遇到過問題。

+0

bleach.clean(「是不允許」,條= TRUE),這可能是正是我需要的,我會做一些測試使用UTF-8,HTML實體和今晚的東西,然後讓你知道,謝謝 – 2013-04-09 10:36:45

+0

漂白劑可能不會將HTML實體轉換爲其真正的UTF-8副本。如果沒有,請嘗試下面的問題:http://stackoverflow.com/questions/57708/convert-xml-html-entities-into-unicode-string-in-python – 2013-04-10 00:15:56

1

也許pyquery?嘗試easy_install/pip install pyquery;然後一些代碼,如:

from pyquery import PyQuery as jQ 

dom = jQ("<html>...</html>") 
print dom("body").text() 
相關問題