2012-03-12 6 views
9

Я написал скрипт python, который обрабатывает большое количество загружаемых веб-страниц HTML (120K страниц). Мне нужно проанализировать их и извлечь из него некоторую информацию. Я пробовал использовать BeautifulSoup, который прост и интуитивен, но, похоже, он работает очень медленно. Поскольку это то, что нужно регулярно запускать на слабой машине (на амазонке), важно. есть ли в python HTML/XML-парсер, который будет работать намного быстрее, чем BeautifulSoup? или я должен прибегать к регулярному анализу регулярных выражений.Быстрый парсер HTML python

+5

[Держите пони в сторону ...] (http://stackoverflow.com/a/1732454/554546) –

+2

У меня нет опыта работы с разбором HTML в Python, но [здесь] (http: //blog.ianbicking .org/2008/03/30/python-html-parser-performance /) - это некоторые результаты тестов, которые могут оказаться полезными. –

+8

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

ответ

0

try: ElementTree может быть быстрее, но я не уверен.

xml.etree.ElementTree import ElementTree 
+0

Я тоже собирался это предложить ... хотя, у меня нет данных для поддержки соотношений производительности в сравнении с BeautifulSoup – inspectorG4dget

3

парсеры SAX-стиль может быть быстрее, чем те, DOM основе. Вашему коду предоставляется поток элементов, и вы должны заключить (и потенциально хранить) свои отношения; но вам нужно только поддерживать столько состояний, сколько требуется для получения требуемых данных. Напротив, парсерам DOM-стиля необходимо построить навигационную объектную модель, которая требует времени (и памяти), которое, возможно, вам не нужно тратить.

Python имеет такой синтаксический анализатор для HTML; он называется HTMLParser (html.parser в Python 3). Однако, в зависимости от того, насколько сложно распознать данные, которые вы хотите извлечь, это может быть очень сложно успешно прервать такой синтаксический анализ. Если бы вы отправили файл примера и информацию о том, какие данные вы хотите извлечь из него, я, вероятно, мог бы взять удар.