2013-04-09 14 views
5

Ho letto molti q & a su come rimuovere tutto il codice html da una stringa usando python ma nessuno era soddisfacente. Ho bisogno di un modo per rimuovere tutti i tag, preservare/convertire le entità html e lavorare bene con le stringhe utf-8.Rimuovere in modo sicuro tutto il codice html da una stringa in python

Apparentemente BeautifulSoup è vulnerabile ad alcune stringhe html appositamente predisposti, ho costruito un semplice parser con HTMLParser per ottenere solo i testi, ma stavo perdendo le entità

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) 

mi dà qualcosa di simile

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

perdere l'entità per la "e" accentata in spécialiste.

Utilizzando una delle molte espressioni regolari che è possibile trovare come risposte a domande simili, avrà sempre alcuni casi limite che non sono stati considerati.

C'è qualche modulo davvero utile che potrei usare?

risposta

4

bleach è eccellente per questo compito. Fa tutto il necessario. Ha una vasta suite di test che controlla casi di bordi strani in cui i tag potrebbero scivolare. Non ho mai avuto un problema con esso.

+0

bleach.clean (' non è consentito', striscia = True) questo potrebbe essere esattamente quello che mi serve, farò alcuni test con utf-8, entità HTML e che roba stasera e poi ti faccio sapere, grazie –

+0

Bleach non può trasformare le entità HTML nella loro controparte UTF-8 reale. In caso contrario, prova questa domanda: http://stackoverflow.com/questions/57708/convert-xml-html-entities-into-unicode-string-in-python –

1

forse pyquery? prova easy_install/pip installa pyquery; poi alcuni codice come:

from pyquery import PyQuery as jQ 

dom = jQ("<html>...</html>") 
print dom("body").text() 
Problemi correlati