Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Часто у вебмастера, маркетолога или SEO-специалиста возникает необходимость извлечь данные со страниц сайтов и отобразить их в удобном виде для дальнейшей обработки. Это может быть парсинг цен в интернет-магазине, получение числа лайков или извлечение содержимого отзывов с интересующих ресурсов.

По умолчанию большинство программ технического аудита сайтов собирают только содержимое заголовков H1 и H2, однако, если например, вы хотите собрать заголовки H5, то их уже нужно будет извлекать отдельно. И чтобы избежать рутинной ручной работы по парсингу и извлечению данных из HTML-кода страниц – обычно используют веб-скраперы.

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Веб-скрейпинг – это автоматизированный процесс извлечения данных с интересующих страниц сайта по определенным правилам.

Возможные сферы применения веб-скрейпинга:

  • Отслеживание цен на товары в интернет-магазинах.
  • Извлечение описаний товаров и услуг, получение числа товаров и картинок в листинге.
  • Извлечение контактной информации (адреса электронной почты, телефоны и т.д.).
  • Сбор данных для маркетинговых исследований (лайки, шеры, оценки в рейтингах).
  • Извлечение специфичных данных из кода HTML-страниц (поиск систем аналитики, проверка наличия микроразметки).
  • Мониторинг объявлений.

Основными способами веб-скрейпинга являются методы разбора данных используя XPath, CSS-селекторы, XQuery, RegExp и HTML templates.

  • XPath представляет собой специальный язык запросов к элементам документа формата XML / XHTML. Для доступа к элементам XPath использует навигацию по DOM путем описания пути до нужного элемента на странице. С его помощью можно получить значение элемента по его порядковому номеру в документе, извлечь его текстовое содержимое или внутренний код, проверить наличие определенного элемента на странице. Описание XPath >>
  • CSS-селекторы используются для поиска элемента его части (атрибут). CSS синтаксически похож на XPath, при этом в некоторых случаях CSS-локаторы работают быстрее и описываются более наглядно и кратко. Минусом CSS является то, что он работает лишь в одном направлении – вглубь документа. XPath же работает в обе стороны (например, можно искать родительский элемент по дочернему). Таблица сравнения CSS и XPath >>
  • XQuery имеет в качестве основы язык XPath. XQuery имитирует XML, что позволяет создавать вложенные выражения в таким способом, который невозможен в XSLT. Описание XQuery >>
  • RegExp – формальный язык поиска для извлечения значений из множества текстовых строк, соответствующих требуемым условиям (регулярному выражению). Описание RegExp >>
  • HTML templates – язык извлечения данных из HTML документов, который представляет собой комбинацию HTML-разметки для описания шаблона поиска нужного фрагмента плюс функции и операции для извлечения и преобразования данных. Описание HTML templates >>

Обычно при помощи парсинга решаются задачи, с которыми сложно справиться вручную. Это может быть веб скрейпинг описаний товаров при создании нового интернет-магазина, скрейпинг в маркетинговых исследованиях для мониторинга цен, либо для мониторинга объявлений (например, по продаже квартир). Для задач SEO-оптимизации обычно используются узко специализированные инструменты, в которых уже встроены парсеры со всеми необходимыми настройками извлечения основных SEO параметров.

BatchURLScraper

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

Поэтому нами был создан простой и бесплатный инструмент – BatchURLScraper, предназначенный для сбора данных из списка URL с возможностью экспорта полученных результатов в Excel.

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Интерфейс программы достаточно прост и состоит всего из 3-х вкладок:

  • Вкладка "Список URL" предназначена для добавления страниц парсинга и отображения результатов извлечения данных с возможностью их последующего экспорта.
  • На вкладке "Правила" производится настройка правил скрейпинга при помощи XPath, CSS-локаторов, XQuery, RegExp или HTML templates.
  • Вкладка "Настройки" содержит общие настройки программы (число потоков, User-Agent и т.п.).
Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта
Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Также нами был добавлен модуль для отладки правил.

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

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

Разберем более подробно примеры настроек парсинга для различных вариантов извлечения данных.

Извлечение данных со страниц сайтов в примерах

Так как BatchURLScraper позволяет извлекать данные из произвольного списка страниц, в котором могут встречаться URL от разных доменов и, соответственно, разных типов сайта, то для примеров тестирования извлечения данных мы будем использовать все пять вариантов скрейпинга: XPath, CSS, RegExp, XQuery и HTML templates. Список тестовых URL и настроек правил находятся в дистрибутиве программы, таким образом можно протестировать все это лично, используя пресеты (предустановленные настройки парсинга).

Механика извлечения данных

1. Пример скрейпинга через XPath.

Например, в интернет-магазине мобильных телефонов нам нужно извлечь цены со страниц карточек товаров, а также признак наличия товара на складе (есть в наличии или нет).

Для извлечения цен нам нужно:

  • Перейти на карточку товара.
  • Выделить цену.
  • Кликнуть по ней правой кнопкой мыши и нажать «Показать код элемента» (или «Inspect», если вы используете англоязычный интерфейс).
  • В открывшемся окне найти элемент, отвечающий за цену (он будет подсвечен).
  • Кликнуть по нему правой кнопкой мыши и выбрать «Копировать» > «Копировать XPath».

Для извлечения признака наличия товара на сайте операция будет аналогичной.

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

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

Далее, в списке правил программы мы добавляем поочередно правила и вставляем в них ранее скопированные коды элементов XPath из браузера.

2. Определяем присутствие счетчика Google Analytics при помощи RegExp или XPath.

  • XPath: Открываем исходный код любой страницы по Ctrl-U, затем ищем в нем текст "gtm.start", ищем в коде идентификатор UA-..., и далее также используя отображение кода элемента копируем его XPath и вставляем в новое правило в BatchURLScraper.
  • RegExp: Поиск счетчика через регулярные выражения еще проще: код правила извлечения данных вставляем ['](UA-.*?)['].
Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

3. Извлечь контактный Email используя CSS.

Тут совсем все просто. Если на страницах сайта встречаются гиперссылки вида "mailto:", то из них можно извлечь все почтовые адреса.

Для этого мы добавляем новое правило, выбираем в нем CSSPath, и в код правила извлечения данных вставляем правило a[href^="mailto:"].

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

4. Извлечь значения в списках или в таблице при помощи XQuery.

В отличии от других селекторов, XQuery позволяет использовать циклы и прочие возможности языков программирования.

Например, при помощи оператора FOR можно получить значения всех списков LI. Пример:

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Либо узнать, есть ли почта на страницах сайта:

  • if (count(//a[starts-with(@href, 'mailto:')])) then "Есть почта" else "Нет почты"

5. Использование HTML templates.

В данном языке извлечения данных в качестве функций можно использовать XPath/XQuery, CSSpath, JSONiq и обычные выражения.

Тестовая таблица:

Веб-скрейпинг: как бесплатно спарсить и извлечь данные с сайта

Например, данный шаблон ищет таблицу с атрибутом id="t2" и извлекает текст из второго столбца таблицы:

  • <table id="t2"><template:loop><tr><td></td><td>{text()}</td></tr></template:loop></table>

Извлечение данных из второй строки:

  • <table id="t2"><tr></tr><tr><template:loop><td>{text()}</td></template:loop></tr></table>

А этот темплейт вычисляет сумму чисел в колонке таблицы:

  • <table id="t2">{_tmp := 0}<template:loop><tr><td>{_tmp := $_tmp + .}</td></tr></template:loop>{result := $_tmp}</table>

Таким образом, мы получили возможность извлекать практически любые данные с интересующих страниц сайтов, используя произвольный список URL, включающий страницы с разных доменов.

Скачать BatchURLScraper и протестировать работу правил извлечения данных можно по этой ссылке

36
21 комментарий