Форум сайта python.su
Хочу собрать в этом топике ссылки на инструменты для парсинга сайтов и анализа данных. Если знаете какую-нибудь библитеку, напишите об этом! Пожалуйста указывайте сразу краткое описание библиотеки и ссылку на документацию. От одного названия толка мало будет.
Парсинг сайтов, работа с HTTP запросами
urllib и urllib2 - стандартные библиотеки языка python для работы с сетью
requests - популярная библиотека для работы с HTTP протоколом, не требует дополнительных зависимостей.
Grab - фреймворк для парсинга сайтов, позволяет работать как с одиночными запросами (а ля requests), так и писать сложные асинхронные пауки для сайтов (а ля scrapy). Требует pycurl и lxml.
scrapy - асинхронный фреймворк для парсинга сайтов. Требует twisted.
Парсинг HTML и XML
lxml - эффективная библиотека для парсинга HTML, поддерживает Xpath запросы, предоставляет DOM и SAX парсеры для XML.
cssselect - парсинг XML/HTML с помощью css-запросов (требует lxml)
pyquery - парсинг XML/HTML с помощью jquery-запросов (требует lxml)
BeautifulSoup - глючная тормозная библиотека для парсинга XML/HTML, не поддерживающая xpath запросы, плюсом является то, что она написана на чистом питоне.
html5lib - парсинг и сериализация HTML по спецификации WHATWG (на неё ориентируются современные веб-браузеры). Возможно выбрать для построения DOM-дерева, как встроенные средства питона, так и библиотеки lxml или BeautifulSoup.
feedparser - парсинг RSS и ATOM фидов.
Bleach - библиотека для очистки HTML (требует html5lib)
Эмуляторы браузеров
selenium - средство для тестирования веб-интерфейсов с помощью реальных браузеров: google chrome, opera, firefox, IE. Можно и сайты через него парсить. Есть некоторые неудобства, связанные с идеологией инструмента - он позволяет эмулировать внешние действия пользователя. Например, задать свой собственный Referer - это уже проблема. Не требует дополнительных зависимостей.
Ghost.py - обёртка над QtWebKit (требует PyQt или PySide)
Spynner - ещё одна обёртка над QtWebKit, более ничего не знаю про эту либу :)
Параллельная многозадачность
threading - встроенный в python модуль для реализации многозадачности с помощью тредов (объекты языка, выполняющиеся в одном процессе). Минусы подхода в том, что вы не можете загрузить вычислениями более одного ядра.
multiprocessing - встроенный в python модуль для реализации многозадачности с помощью процессов
celery - навороченная реализация очереди задач, поддерживающая различные бэкенды для хранения этой самой очереди задач.
RQ - легковесная очередь задач, использующая redis
Облачные вычислениях
picloud - выполнение python-кода в облаке
dominoup.com - выполнение R, Python и matlab кода в облаке
Отредактировано lorien (Май 24, 2014 19:19:44)
Офлайн
html5lib
mechanize
Да и кстати все что вы перечислили не использует sax. Если не прав прошу поправить.
Отредактировано PanovSergey (Фев. 14, 2014 09:42:30)
Офлайн
Забыл сказать, сразу предоставляйте описания для билиотек. Например, я не очень в курсе, что делает html5lib. Про mechanize знаю лишь то, что он жутко древний и давно не обновлялся.
Из выше перечисленных либ SAX есть в lxml
Офлайн
lorienКаюсь, mechanize, древний, как и
Забыл сказать, сразу предоставляйте описания для билиотек. Например, я не очень в курсе, что делает html5lib. Про mechanize знаю лишь то, что он жутко древний и давно не обновлялся
Отредактировано PanovSergey (Фев. 14, 2014 11:19:37)
Офлайн
html5lib использует lxml опционально, он может строить и сериализовать DOM-дерево и с помощью других либ: http://html5lib.readthedocs.org/en/latest/movingparts.html#tree-builders
Офлайн
Кто-нить может внятно дать описание библиотеке html5lib? Я серьёзно не понимаю, зачем она нужна.
Офлайн
html5lib - это парсер, который позволяет работать с html5 из неизвестного (небезопасного) источника с возможностью построить дерево, нормализировать в соответствии со спецификацией WHATWG и обработать его даже, если html не валидный, грязный (CSS внутри тэгов) или содержит атакующий код.
Он медленный, но надежный, может быть надстроен над lxml для обеспечения большей надежности:
http://lxml.de/html5parser.html
Офлайн
Если скорости html5lib не хватает, можно смотреть в сторону https://github.com/google/gumbo-parser - парсер написан на С и проходит все тесты html5lib. Я, правда, сам не пользовался.
Офлайн
html5lib это наиболее точный из существующих парсеров HTML, как верно подмечено он пишется по постоянно обновляемой спецификации на HTML5. Его можно назвать эталонным парсером, но он очень медленный, если скорость не критична (небольшое число документов), то однозначно нужно выбирать этот парсер, так как он покажет ровно то что вы увидите в браузере. Естественно в нём как и в 9000 других парсерах отсутствует виртуальная машина JS. html5lib в отличии от lxml и других парсеров не имеет своей реализации DOM или другого типа дерева документа, поэтому он использует сторонние структуры документов (html5lib.treebuilders): minidom (в батарейках), lxml.etree (не используется парсер lxml, создаётся дерево lxml.etree собственными средствами!), BeautifulSoup (не используется парсер BeautifulSoup, создаётся документ BeautifulSoup собственными средствами!) и что-то там ещё. Безусловно можно реализовать свой билдер и построить собственный документ (с поиском и сериализацией). html5lib существенно проигрывает в скорости lxml (на 1-2 порядка) и не годится для использования в “промышленных” масштабах, при том что lxml весьма качественно выполняет свою работу и нарекания к нему возникают очень редко.
p.s. Что такое “возможно выбрать для парсинга … lxml”?
..bw
Отредактировано bw (Фев. 16, 2014 15:38:12)
Офлайн
bw, спасибо, более-менее ясно стало.
> p.s. Что такое “возможно выбрать для парсинга … lxml”?
Поправил :) Если у вас есть вариант краткого описания для html5lib, предлагайте. Хотя, возможно, есть смысл добавлять более-крупные описания, типа того, что вы дали.
Буду иметь html5lib в виду, может быть, пригодится. Иногда, раз в 100 лет lxml при парсинге теряет куски документа, если он уж очень кривой. Подробностей не помню, такое 1 или 2 раза встречал за всю жизнь.
Офлайн