Как собирать данные с сайтов: онлайн-сервисы и Python

НКО и гражданские активисты Перми работают над данными в своих проектах. Фото Ивана Печищева.
НКО и гражданские активисты Перми работают над данными в своих проектах. Фото Ивана Печищева.

31 марта 2018 года в Перми состоялся митап Теплицы социальных технологий, посвященный технологии веб-скрейпинга с помощью программного кода. Участники обсудили необходимость сбора данных и рассмотрели сценарии использования собранных данных для исследования проблемы, изучения аудитории в соцсетях и журналистского (гражданского) расследования.

Основы Python для начинающих: три строчки кода и 10 минут объяснений. Фото Ивана Печищева
Основы Python для начинающих: три строчки кода и 10 минут объяснений. Фото Ивана Печищева.

Веб-скрейпинг (от англ. Scraping – соскабливание) – это технология, использующая скрипты для захода на сайт под видом обычного пользователя и собирающая информацию по заранее установленным параметрам. Таким образом, можно получать, обрабатывать, систематизировать и сохранять в обычном текстовом формате данные тысяч веб-страниц за считанные минуты.

Эксперт митапа, Эскендер Джемадинов, магистр факультета экономики, менеджмента и бизнес-информатики НИУ ВШЭ, Пермь, рассказал о теоретических основах сбора данных и показал на практике возможности языка Python.

Первое, с чем стоит разобраться начинающим «скрайперам», – это Document Object Model. Это объектная модель, по которой построен любой html-документ: элементы выстраиваются в иерархию, как ствол и ветви дерева от корня. Каждый html-тег становится частью дерева с типом «элемент». Вложенные в него теги становятся дочерними узлами. У каждого элемента есть атрибут, его характеристика.

Document Object Model. Слайд из презентации Эскендера Джемадинова
Document Object Model. Слайд из презентации Эскендера Джемадинова.

С помощью DOM-приложения и исполняемый код, которые «видят» содержимое html-страниц. Указав искомый элемент и его характеристику, можно автоматически найти его на множестве веб-страниц, не прибегая к ручному поиску.

Теперь обратимся к программированию. Для работы по сбору данных могут потребоваться следующие библиотеки Python или их аналоги:

  • Requests выполняет HTTP-запросы (обращение к сайту, получение данных веб-страницы);
  • BeatifulSoup анализирует html-код и выделяет нужные элементы с указанными характеристиками (это называется «парсинг»).

Нужно учитывать, что администраторам сайтов не нравится, когда кто-то проводит сбор информации таким образом, так как это создает дополнительную нагрузку на сайт. Иногда системные администраторы защищают сайт количеством допустимых запросов, авторизацией, установкой элементов, скрывающих часть контента. С помощью Python можно обойти эти преграды, но это следующая ступень навыков программирования.

Для работы с Python потребуется скачать и установить:

  • интерпретатор Python (на митапе в Перми использовали версию 3.6.4);
  • интегрированную среду разработки PyCharm Community.

В целом алгоритм действий при сборе информации выглядит так:

Алгоритм web scraping'a
Алгоритм web scraping'a

Участники митапа под руководством Эскендера Джемадинова для начала собрали информацию с обычной веб-страницы с помощью кода, потом – объявления портала Avito. Не обошли вниманием и соцсети. Эскендер рассказал о своем проекте анализа Instagram.

А если без программирования?

Тем, кому сложно программировать, можно попробовать собирать данные с сайтов с помощью специальных сервисов:

  • Listly – расширение для браузера Chrome;
  • Web Robots – онлайн-сервис.

Дополнительно рекомендуем прочитать: