Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Data Mining
  • » Инструменты для парсинга сайтов и анализа данных [RSS Feed]

#1 Фев. 14, 2014 09:23:55

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Инструменты для парсинга сайтов и анализа данных

Хочу собрать в этом топике ссылки на инструменты для парсинга сайтов и анализа данных. Если знаете какую-нибудь библитеку, напишите об этом! Пожалуйста указывайте сразу краткое описание библиотеки и ссылку на документацию. От одного названия толка мало будет.

Парсинг сайтов, работа с 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)

Офлайн

#2 Фев. 14, 2014 09:37:57

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

Инструменты для парсинга сайтов и анализа данных

html5lib
mechanize

Да и кстати все что вы перечислили не использует sax. Если не прав прошу поправить.

Отредактировано PanovSergey (Фев. 14, 2014 09:42:30)

Офлайн

#3 Фев. 14, 2014 10:10:32

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Инструменты для парсинга сайтов и анализа данных

Забыл сказать, сразу предоставляйте описания для билиотек. Например, я не очень в курсе, что делает html5lib. Про mechanize знаю лишь то, что он жутко древний и давно не обновлялся.

Из выше перечисленных либ SAX есть в lxml

Офлайн

#4 Фев. 14, 2014 10:22:13

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

Инструменты для парсинга сайтов и анализа данных

lorien
Забыл сказать, сразу предоставляйте описания для билиотек. Например, я не очень в курсе, что делает html5lib. Про mechanize знаю лишь то, что он жутко древний и давно не обновлялся
Каюсь, mechanize, древний, как и BeautifulSoup, а нет смотрите он жив. html5lib Использует lxml. Насчет SAX вы правы.

Отредактировано PanovSergey (Фев. 14, 2014 11:19:37)

Офлайн

#5 Фев. 14, 2014 13:39:45

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Инструменты для парсинга сайтов и анализа данных

html5lib использует lxml опционально, он может строить и сериализовать DOM-дерево и с помощью других либ: http://html5lib.readthedocs.org/en/latest/movingparts.html#tree-builders

Офлайн

#6 Фев. 14, 2014 13:42:49

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Инструменты для парсинга сайтов и анализа данных

Кто-нить может внятно дать описание библиотеке html5lib? Я серьёзно не понимаю, зачем она нужна.

Офлайн

#7 Фев. 14, 2014 15:34:01

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Инструменты для парсинга сайтов и анализа данных

html5lib - это парсер, который позволяет работать с html5 из неизвестного (небезопасного) источника с возможностью построить дерево, нормализировать в соответствии со спецификацией WHATWG и обработать его даже, если html не валидный, грязный (CSS внутри тэгов) или содержит атакующий код.
Он медленный, но надежный, может быть надстроен над lxml для обеспечения большей надежности:
http://lxml.de/html5parser.html



Офлайн

#8 Фев. 16, 2014 14:38:52

kmike
От:
Зарегистрирован: 2009-12-07
Сообщения: 56
Репутация: +  4  -
Профиль   Отправить e-mail  

Инструменты для парсинга сайтов и анализа данных

Если скорости html5lib не хватает, можно смотреть в сторону https://github.com/google/gumbo-parser - парсер написан на С и проходит все тесты html5lib. Я, правда, сам не пользовался.



Офлайн

#9 Фев. 16, 2014 15:35:34

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Инструменты для парсинга сайтов и анализа данных

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)

Офлайн

#10 Фев. 16, 2014 18:23:44

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Инструменты для парсинга сайтов и анализа данных

bw, спасибо, более-менее ясно стало.

> p.s. Что такое “возможно выбрать для парсинга … lxml”?
Поправил :) Если у вас есть вариант краткого описания для html5lib, предлагайте. Хотя, возможно, есть смысл добавлять более-крупные описания, типа того, что вы дали.

Буду иметь html5lib в виду, может быть, пригодится. Иногда, раз в 100 лет lxml при парсинге теряет куски документа, если он уж очень кривой. Подробностей не помню, такое 1 или 2 раза встречал за всю жизнь.

Офлайн

  • Начало
  • » Data Mining
  • » Инструменты для парсинга сайтов и анализа данных[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version