2012-03-12 12 views
9

Ho scritto uno script python che elabora una grande quantità di pagine HTML scaricate (pagine 120K). Devo analizzarli ed estrarre alcune informazioni da lì. Ho provato a utilizzare BeautifulSoup, che è facile e intuitivo, ma sembra funzionare molto lentamente. Poiché questo è qualcosa che dovrà essere eseguito regolarmente su una macchina debole (su Amazon), la velocità è importante. c'è un parser HTML/XML in python che funzionerà molto più velocemente di BeautifulSoup? o devo ricorrere all'analisi regex ..Un parser HTML Python veloce

+5

[Tenere lontano il pony ...] (http://stackoverflow.com/a/1732454/554546) –

+2

Non ho esperienza con l'analisi dell'HTML in Python, ma [qui] (http: //blog.ianbicking .org/2008/03/30/python-html-parser-performance /) sono alcuni risultati di benchmark che potresti trovare utili. –

+8

[regex e HTML == errore] (http://stackoverflow.com/a/1732454/554546) –

risposta

0

provare: ElementTree potrebbe essere più veloce, ma non sono sicuro.

xml.etree.ElementTree import ElementTree 
+0

Stavo per suggerire anche questo ... anche se, non ho dati per supportare i rapporti di prestazione di questo contro BeautifulSoup – inspectorG4dget

3

parser in stile SAX può essere più veloce di quelli DOM-based. Il tuo codice riceve un flusso di elementi e devi dedurre (e potenzialmente memorizzare) le loro relazioni; ma è sufficiente mantenere lo stato richiesto per ottenere i dati desiderati. Al contrario, i parser in stile DOM devono creare un modello di oggetto navigabile, che richiede tempo (e memoria) che forse non è necessario spendere.

Python ha un parser per HTML; è chiamato HTMLParser (html.parser in Python 3). A seconda di quanto sia difficile riconoscere i dati che si desidera estrarre, tuttavia può essere molto difficile riuscire a sgretolare con successo tale analisi. Se dovessi pubblicare un file di esempio e informazioni su quali dati desideri estrarre da esso, potrei probabilmente fare un colpo.