Веб-скрапинг. Инструменты

Для скрапинга можно использовать всё что угодно. Вам нужно лишь сделать запрос, получить содержимое и дальше его разобрать. Теоретически, скрапинг можно делать на bash + какой-то программой для работы с xml.

Библиотеки для работы с сетью и парсинга html есть во всех языках. Можете брать любой. Однако скрапинг помимо собственно запроса и обработки включает еще кучу всяких вещей.

Вам нужно ходить по ссылкам и желательно делать это параллельно. Нужно отсекать дубликаты чтобы не было циклов. Если сайт работает медленно или отдает ошибки то нужно делать повторные запросы и ограничивать количество запросов в секунду чтобы не положить его. Все должно работать в куче потоков и асинхронно, потому что это I/O. Нужно прокидывать правильные юзерагенты. Часто для доступа к страницам нужно логиниться на сайт и передавать в запросе печеньку. Если вы работаете с SPA то нужно подключать headless браузер чтобы выполнялся JS. После извлечения нужных данных нужно положить их в базу и дообработать. Если скрапинг делается периодчески, желательно собирать статистику и делать мониторинг—сколько всего страниц обработано, сколько с ошибками и так далее. Как и в любой задаче, как только начинаешь вникать детали то проваливаешься в кроличью нору.

Исторически сложилось, что кроме поисковиков больше всего скрапингом занимаются датасаенс ребята. На мой взгляд, именно у них наиболее развиты инструменты. Я делал большие проекты, пользуюсь сам и рекомендую вам scrapy. Он сделан на python, и из коробки решает практически все задачи, а что не решает—докручивается плагинами. Самая распространённая такая задача—это выполнять JS. Для этого есть проекты splash, scrapy-selenium и другие. У ruby есть неплохой kimurai, node.js тоже богат на инструментарий, но с ним одна проблема—пакеты делаются усилиями одиночных людей и быстро перестают поддерживаться. Puppeteer и его друзья—это не совсем инструменты для скрапинга, это low-level управление браузерами, которое можно использовать в том числе и для скрапинга, поэтому я их не рассматриваю. Возможно в комментариях читатель подскажет реальную альтернативу scrapy, но я такого не видел.

Кроме собственно scrapy, для работы вам нужно будет научиться XPath, чтобы разбирать HTML, который пришел на вход. Есть библиотеки, которые позволяют работать с CSS-селекторами, но я уже привык к XPath и всем советую его изучить.

Но написать скрапер—это только половина, а то и четверть работы. Дальше нужно сделать инфраструкту чтобы он работал по расписанию, подключать прокси, мониторинг, постобработку и так далее и так далее. Есть продукты которые частично решают эти задачи, например Scrapinghub, но чаще приходится городить свой огород, потому что коробочные решения лимитированы. Одна из моих идей для проектов—это как раз сервис который предоставляет такую инфраструктуру, но это непросто сделать, поэтому я пока забил.

Скрапинг это очень популярная задача, поэтому в интернетах есть миллионы туториалов для всех языков. Если вам, например, зачем-то понадобится собрать имена и емейлы депутатов Верховной Рады—вы уже знаете с помощью чего это можно сделать.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred