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

Часто у вебмастера, маркетолога или 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 и протестировать работу правил извлечения данных можно по этой ссылке

0
22 комментария
Написать комментарий...
Aleks Cloud

Андрей, спасибо! Буквально позавчера возникла необходимость в подобной задаче (найти элемент по определенным правилам, на всех страницах сайта, чтобы понять, где он пустой). Думал уже разбираться с А-парсером, или подобным софтом... Так что ваша программа как нельзя кстати - сразу в тест пойдет. Огромное спасибо вам за все что вы делаете!

Ответить
Развернуть ветку
Владимир AngryCEO

Если говорим про SEO,  то не проще ли ScreamingFrog воспользоваться?) 

Ответить
Развернуть ветку
Aleks Cloud

Проще) он уже бесплатным стал?

Ответить
Развернуть ветку
Антон Куниченко

А за него кто-то платит?

Ответить
Развернуть ветку
Aleks Cloud

Один самостоятельно скрипты писать предлагает... Другой программы взламывать... Зачем такие трудности, когда есть легально бесплатный софт, который к тому же развивается?

Ответить
Развернуть ветку
Андрей Симагин
Автор

Пожалуйста! Уже выложили апдейт )

Ответить
Развернуть ветку
Vyacheslav Bagmut

А еще лучше просто использовать многопоточный Puppeteer, гораздо больше возможностей. Бесплатно, гибко и масштабируемо. Нужно было найти свой номер на страницах одного сайта, написал скрипт и распарсил на скорости 600 страниц в минуту (машина MBP 15" 2018). https://www.npmjs.com/package/puppeteer-cluster

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Андрей Симагин
Автор

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

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

Ответить
Развернуть ветку
Aleks Cloud

Написал свой скрипт, ради того чтобы найти свой номер на страницах ОДНОГО сайта... Уважаемый, а вы точно сеошник?)

Ответить
Развернуть ветку
Vyacheslav Bagmut

Я вообще фронтендер ;) Но думаю хотя бы основы JS сеошники должны знать в наше время. Чтобы не искать каждый раз GUI программы.

Ответить
Развернуть ветку
Андрей Симагин
Автор

Лол) чтобы каждый раз не искать GIU программы - знаниями одних только основ не обойдешься )

Ответить
Развернуть ветку
Aleksey Anisin

Андрей, простите что не совсем по теме статьи, но вам что-то нужно делать со стабильностью(?) ваших продуктов. Что скрэйпер, что сайтаналайзер не справляется с сайтами больше 500К страниц (ИМ чуть больше среднего). Уже не первый раз оставляю работать на ночь, прихожу утром и вижу что приложение упало.
По функционалу и скорости работы ваши решения мне нравятся сильно больше, чем аналоги. Ровно то, что нужно и ничего лишнего. Но каждый раз после тестов приходится возвращаться к нетпикам/датаколам, обидно.

Ответить
Развернуть ветку
Андрей Симагин
Автор

Благодарю за отзыв, над стабильностью работаем, это вопрос времени.
Как раз в скрейпере выложили обновление - устранили утечки памяти.

Ответить
Развернуть ветку
Roman Safin

Osmosis нпм пакет простой и мощный  для веб скрапинга не благодарите 

Ответить
Развернуть ветку
Роман Панин

Спасибо за полезную информацию)

Ответить
Развернуть ветку
Андрей Симагин
Автор

На здоровье! )

Ответить
Развернуть ветку
Виктор Понкратов

Если нужно проводить парсинг цен то можно использовать uxprice.com там 14 дней бесплатно 

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Роман Коломбо

Андрей, спасибо за программу! Очень эффективная, простая и интуитивно понятная)

Ответить
Развернуть ветку
Андрей Симагин
Автор

Роман, рад что программа понравилась!
Она будет встроена в новую версию SiteAnalyzer, так что возможностей для скрейпинга станет еще больше.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Виктор Киви

Здравствуйте! Можете помочь?

Сейчас некоторые материалы из Ютуб, ВК, Инстаграмм и др. сайтов удаляют, цензура. Или просто сайт перестаёт существовать.

Есть задача:
сохранять сами публикации (посты соц.сетей, новостных или гос. учреждений и др. сайтов, с сайтов англоязычных и т.п. ) вместе с комментарии к конкретным постам в таблице, например. А также сохранять видеозаписи с ютуб и соц.сетей вместе со всеми комментариями. Чтобы потом с комментариями дальше работать. Чтобы они никуда не пропали, чтобы потом можно было доказать, что мнение людей было "вот таким", привести публикации, видеозаписи, то, что с сайтов уже удалили и комментарии людей.

Я не программист, в кодах не разберусь, просто с компьютером "на ты".

Скажите, пожалуйста, какие инструменты, сервисы для этого есть?

Ответить
Развернуть ветку
Андрей Симагин
Автор

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

Ответить
Развернуть ветку
19 комментариев
Раскрывать всегда