Парсеры сайтов на python (тестирование, сбор информации)

Автор: Igor Kirsanov

Скачивание страниц

  1. urllib - основная библиотека в python 3 для загрузки информации
  2. requests - обертка над urllib, пользоваться гораздо проще и удобнее чем стандартной
  3. pycurl - альтернативный способ скачивания с помощью библиотеки curl

Разбор данных

  1. re - стандартная библиотека регулярных выражений, не предназначена для разбора html, но позволяет из найденого участка получить нужную информацию, например часть заголовка, значения из javascript кода на странице
  2. lxml - основная библиотека для разбора данных, позволяет разбирать xml и html, автоматическая валидация с закрытием тегов, основной язык запросов при работе с html - xpath
  3. pyquery - получение данных из html используя jQuery подобные запросы. Например p.attr["id"]
  4. BeautifulSoup 4 - библиотека для разбора html, собственный синтаксис для разбора. Например soup.find("ul", "slides") найдет ul с классом slides

Браузеры без поддержки js

  1. mechanize - один из простых и самых старых текстовых браузеров предназначенных в основном для тестирования, но может использоваться и для сбора данных
  2. zope.testbrowser - изначально предназначен для тестирования фреймворка zope, но может работать самостоятельно. Позволяет получать содержимое станицы, отправлять данные но не поддерживает исполнение javascript.

Браузеры с поддержкой js

  1. splinter - поддержка в качестве ядра бразеров chrome, firefox, phantomjs, zopetestbrowser, remote webdriver. Достаточно мощная система для парсинга и тестирования с поддержкой iframe и ajax запросов. Не все браузеры могут работать на сервере, некоторым необходимо наличие оконного интерфейса
  2. ghost.py - обертка над pyside и pyqt4. Поддерживает выполнение js запросов, отправку данных. Но что-то кроме тестирования и заполнения форм на нем сделать не так просто.
  3. selenium webdriver - основное назначение тестирование, для сбора данных в чистом виде применяется достаточно редко. Использует движки браузеров установленных в системе / удаленной системе.
  4. phantomjs - через selenium или splinter. Изначально система на js, поддерживает его исполнение, но при этом не требуется поддержка оконного интерфейса.

Пауки

  1. scrapy - старый, хорошо документированный паук. Основное предназначение сбор данных с сайтов.
  2. grab - хорошая система, но практически без свежей документации. Приходится разбираться изучая код. В большинстве предствляет обертку над другими библиотеками.

Валидация и очистка верстки

  1. lxml.html - свой валидатор, закрывает открытые теги, может очистить документ от ненужного.
  2. pytidylib - автоматически закрывает незакрытые теги при ошибочной верстке, используется библиотека HTML Tidy

 

Отладка и поиск xpath

1 комплект. На основе браузера Firefox.
firefox + firebug + firepath + firefinder

firepath для выбор элемента и получение его пути  по клику мышки через автовыбор. Пути иногда получаются короче, чем когда составляешь вручную. firefinder лучше справляется с отладкой текста запроса.  Выбранные элементы подсвечиваются на странице.

 

2 комплект SketchPath (только для windows)
XMLQuery - новая версия, продолжение развития SketchPath
XPath Editor - старая версия SketchPath

 

Примеры

XPath 1.0 примеры

Шпаргалка по xpath с часто используемыми примерами получения данных