2012-03-12 13 views
9

Napisałem skrypt w języku Python, który przetwarza dużą liczbę pobranych stron HTML (strony 120K). Muszę je przeanalizować i pobrać z nich trochę informacji. Próbowałem używać BeautifulSoup, który jest łatwy i intuicyjny, ale wydaje się działać bardzo powoli. Ponieważ jest to coś, co będzie musiało być rutynowo uruchamiane na słabej maszynie (na Amazon), ważna jest szybkość. czy istnieje parser HTML/XML w python, który będzie działać znacznie szybciej niż BeautifulSoup? lub muszę uciekać się do wyrażeń regularnych parsowania ..Szybki parser HTML Pythona

+5

[Trzymaj kucyka z dala ...] (http://stackoverflow.com/a/1732454/554546) –

+2

Nie mam doświadczenia z parsowaniem kodu HTML w Pythonie, ale [tutaj] (http: //blog.ianbicking .org/2008/03/30/python-html-parser-performance /) to niektóre wyniki testów porównawczych, które mogą Ci się przydać. –

+8

[regex i HTML == błąd] (http://stackoverflow.com/a/1732454/554546) –

Odpowiedz

0

try: Element może być szybszy, ale nie jestem pewien.

xml.etree.ElementTree import ElementTree 
+0

Chciałem to również zasugerować ... chociaż nie mam żadnych danych na poparcie tego stosunku wydajności do BeautifulSoup – inspectorG4dget

3

SAX stylu parser może być szybsze niż te oparte na DOM. Twój kod otrzymuje strumień elementów i musisz wywnioskować (i potencjalnie przechowywać) swoje relacje; ale musisz tylko zachować tyle stanu, ile jest wymagane do uzyskania żądanych danych. W przeciwieństwie do parserów DOM-style, trzeba zbudować model obiektów nawigacyjnych, który wymaga czasu (i pamięci), których być może nie trzeba wydawać.

Python ma taki parser dla HTML; nazywa się HTMLParser (html.parser w Pythonie 3). W zależności od tego, jak trudno jest rozpoznać dane, które chcesz wyodrębnić, może być bardzo trudno skutecznie przeprowadzić takie analizowanie. Gdybyś wysłał przykładowy plik i informację, jakie dane chcesz z niego wyodrębnić, prawdopodobnie mógłbym zabić.