Секреты парсинга для SEO: как это делать правильно и для чего

Парсинг – стартовый этап работы с аналитикой. Это естественно: перед тем, как сопоставлять данные и находить взаимосвязи, необходимо их собрать (и делать это правильно!).

В SEOWORK парсинг данных настроен автоматически, и мы работаем в промышленных масштабах (т.е. с большими объемами). Как удалось настроить систему и как мы используем данные?

Материал создан по следам воркшопа "Начало начал и основа основ – секреты парсинга” от Сергея Горобий. Руководитель отдела аналитики SEOWORK раскрыл все карты, как собирать данные и использовать их для продвижения проекта. Поехали!

Что это такое и зачем? Чем отличаются парсинг, скрапинг и краулинг

Часто эти понятия путают, т.к. они для пользователя (и даже для SEO-специалиста) обозначают примерно одно и то же. Но давайте разбираться:

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

Краулинг – обход страниц сайта и сбор неструктурированных данных.

Скрапинг работает и как парсинг, и как краулинг (обход ссылок + сбор данных + разбор + структуризация).

SEOWORK использует parsing, чтобы собрать информацию:

  • частотность (парсинг Wordstat);
  • выдача ПС (сниппеты, колдунщики, информация про органический трафик и контекстную рекламу);
  • слепки HTML (+ разбор в «Аналитике»);
  • сведения из «Техмонитора»;
  • результаты для большей части «инструментов»;
  • сведения из внешних источников (аналитики, webmaster);
  • информации для создания сегментов.

Способы парсинга: как делать это вручную или автоматически

Вручную в браузере. Чтобы парсить интернет-магазины, новостные сайты и другие ресурсы, используйте расширения вроде Scraper, Data Scraper. Такой вариант идеален, если нужно получить данные бесплатно и с минимальным вложением сил. Но в то же время необходимо учитывать и ограничения: вручную в браузере вы обработаете небольшое количество страниц. Для парсинга в крупных проектах такой способ не подходит.

Секреты парсинга для SEO: как это делать правильно и для чего

Через десктоп-приложения.Вариант для тех случаев, когда нужно собрать достаточно большой объем данных. В частности, если необходимо 1000 или больше страниц. Используйте Screaming Frog, A-Parser или Content Downloader.

С надстройкой в Excel (ParserOK). Один из вариантов – использовать программу «ПарсерОК», которая обеспечивает сбор и структуризацию информации с выводом в таблицу Excel (формат xls* и csv). По сути, это надстройка для MS Excel – набор макросов. Чтобы начать работу, нужны 2 файла: Parser.xla (надстройка) и Name.xlp (управление).

Прямой парсинг с занесением в Google Таблицы. Для этой задачи пользователи могут использовать настройки IMPORTXML и IMPORTHTML.

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

Синтаксический анализ HTML

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

Итак, мы собираемся проработать селекторы.

  • Самый популярный - CSS selector (CSSPath)

CSSPath = ‘html > body > span:nth-of-type(1) a’

У нас уже прописаны стили, селектор выдергивает блоки, а мы уже оттуда забираем нужную информацию.

Xpath = ‘html/body/span[1]//a’

Данный способ создавался для xml, но сегодня все чаще используется и для html-структуры. Почему мы рекомендуем внедрять Xpath selector на сложных проектах? Основное преимущество Xpath selector заключается том, что он может проваливаться в глубину и выходить обратно столько раз, сколько нам нужно. В результате мы закрываем большинство задач, поставленных перед парсингом. Т.е. если CSSPath используют для простых задач, то Xpath подходит для более сложных.

  • jQuery selector

В библиотеке jQuery селекторы схожи с теми, которые были в CSS 1-3 + добавлены собственные для манипуляций с элементами.

XPath

Вы можете самостоятельно выбирать, каким способом лучше работать с XPath:

  • через copy XPath (интерфейс браузера);
  • прописав путь XPath самостоятельно.

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

Синтаксис XPath подразумевает использование нод / узлов (ссылка):

Секреты парсинга для SEO: как это делать правильно и для чего

Для целей парсинга нам потребуются также предикаты – они всегда заключены в квадратные скобки, а нужны или для быстрого поиска ноды, или для для поиска узла с нужным нам значением (ссылка):

Секреты парсинга для SEO: как это делать правильно и для чего

Оси – нужны для определения местоположения узлов: ребенок, родитель, потомок, предшествующий и так далее (ссылка):

Секреты парсинга для SEO: как это делать правильно и для чего

Операторы – ниже находится список операторов, которые используются в выражениях XPath. Сами выражения XPath могут возвращать следующие объекты: Node-set (набор узлов), String (строку), Boolean (true / false), Number (число) (ссылка):

Секреты парсинга для SEO: как это делать правильно и для чего

Функции

Чтобы облегчить работу, используем функции XPath. К примеру, чаще всего нам нужны:

  • count() – число / количество;
  • last() / position() – последний / позиция;
  • string-length() – длина строки;
  • contains() – содержит;
  • starts-with() или ends-with() – начинается с № и заканчивается №№;
  • boolean() – проверка на true / false, а также другие.

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

Задача №1. Найти на листинге все товары с ценой от 50 рублей

Секреты парсинга для SEO: как это делать правильно и для чего

Для этого нам нужно найти на странице price-label и обратиться к этому узлу. Поскольку для данной задачи необходимы только целые цифры, мы находим их через span. Позицию обозначаем предикатом.

Секреты парсинга для SEO: как это делать правильно и для чего

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

Чтобы было нагляднее, вот та страница, с которой работали:

Вот то, что нужно было написать для Xpath, чтобы обратиться к ноде и получить необходимое нам значение, соответствующее условиям:

Xpath //div[@class='price-label sku-card-small-prices__price price-label--small price-label--primary']//span[1][.>50]

Но появился вопрос: в out пока попадают только числа (Number). Как нам добавить в результаты парсинга еще и ссылку на товар? Для этого нам нужно посмотреть, где она находится в структуре документа. Открываем разметку и видим, что a href у нас выше div.

Секреты парсинга для SEO: как это делать правильно и для чего

Если говорить простыми словами, цену вложили в ссылку. Чтобы достать ее, нужно перемещаться по оси. Мы помним, что выбрали XPath как раз из-за того, что он позволяет переходить по оси и вверх, и внизу. Т.е. в данном случае нам необходимо обратиться к предку. Используем ось ancestor и забираем атрибутом href у элементов a.

Итак, для парсинга нашей страницы https://lenta.com/catalog/hleb-i-hlebobulochnye-izdeliya/vypechka/izdeliya-iz-sdobnogo-testa/ (цена и ссылка на товар) нужна настройки вида:

Xpath //div[@class='price-label sku-card-small-prices__price price-label--small price-label--primary']//span[1][.>50]//ancestor::a/@href

Задача №2. Посчитать кол-во товара на странице

Сделать это можно при помощи уже готовой функции «count». К примеру, мы выбрали все товары, представленные на странице, а теперь хотим узнать, сколько их.

Секреты парсинга для SEO: как это делать правильно и для чего

Чтобы получить цифровое значение, а не все текстовые, прописываем в Xpath функцию count. Благодаря ей в пару кликов выводятся значения по количеству.

Ссылка на страницу, для которой считали количество товара:

Код, который написали:

Xpath: count(//div[@class='sku-card-small-container'])

Задача №3. Посчитать кол-во символов в статье

Одна из самых типичных задач для SEO. Чтобы быстро получить количество символов в цифровом значении, нужно будет для начала найти текст в разметке. В нашем случае это блок div с атрибутом itemprop и значением articleBody (это видно на скриншоте).

Секреты парсинга для SEO: как это делать правильно и для чего

В граф выделяем весь текст статьи, чтобы дальше посчитать количество символов. Для этого нам пригодится еще одна функция Xpath, о которой писали выше, – string-length.

Страница, для которой мы искали количество символов в статье:

Код, который получили в результате для парсинга страницы:

Xpath: string-length(//div[@itemprop='articleBody'])

Задача №4. Собрать все ссылки на 1 тип товара/страницы с витрины/листинга

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

Опция, которая поможет сделать это, – contains. Как работать с ней и парсить карточки с нужными параметрами? Давайте посмотрим, как это работает на примере Окко.

Секреты парсинга для SEO: как это делать правильно и для чего

Для начала нужно обратиться к карточкам на верхнем уровне (у нас div с классом «_3JAWn»). В результате получили 20 карточек. Дальше смотрим url, из которого можно понять вид кино movie (фильм) и serial (сериал). Именно по нему нам нужно будет проводить проверку, чтобы получить выборку фильмов. Дальше нам остается только обратиться к линку (href) и задать условие фильтрации по movie.

На самом деле может звучать сложно, но в коде это легко отображается и читается.

Секреты парсинга для SEO: как это делать правильно и для чего

Страница, где мы пытались найти только фильмы:

Код, который пришлось написать для поиска по заданному значению:

//div[@class='_3JAWn']//a[contains(@href, '/movie/')]/@href

Если проверите результат, то увидите: в него попали только 16 карточек. Все они содержат фильмы. Код работает.

Задача №5. Настроить фильтрацию по тексту

К примеру, мы решили отфильтровать все по слову «Ватрушка». Для реализации задачи нужна функция contains + необходимо разобраться со структурой. Давайте посмотрим, как делали бы это на странице изделий из слоеного теста в интернет-магазине lenta.com.

Секреты парсинга для SEO: как это делать правильно и для чего

На листинге нам нужно найти div с названием карточек (header__title). Дальше нам необходимо сделать фильтрацию по названию. В предикат прописываем с «A». Через точку обращаемся к нужному нам узлу – т.е. к слову «Ватрушка».

Страница, на которой мы настраивали фильтрацию:

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

//div[@class='sku-card-small-header__title'][contains(. , Ватрушка)]

Секреты парсинга для SEO: как это делать правильно и для чего

В результате работы видим, как система предложила еще 2 товара, подходящих под категорию ватрушек. Поздравляем, код работает. Дальше остается только масштабировать его.

Задача №6. Найти элементы, которые начинаются с №, а заканчиваются №№

Нам нужно собрать список элементов, которые начинаются с movie (к примеру). Здесь тоже не нужны костыли, т.к. работают функции starts-with() или ends-with() от Xpath.

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

Секреты парсинга для SEO: как это делать правильно и для чего

Страница, для которой искали фильмы по заданному значению:

Код, который использовали в Xpath:

//div[@class='_3JAWn']//a[starts-with(@href, '/movie/')]/@href

Задача №7. Как узнать, есть ли дубли H1 на странице?

У нас есть функция boolean, которая проверяет соответствие условию и отдает результат в виде true/false.

К примеру, нам нужно пройтись по сайту и найти те страницы, где 2 или больше Н1 (это влияет на продвижение). Вручную заходить на страницы и проверять долго, особенно если у вас екомерс на сотни тысяч страниц. Гораздо проще написать функцию, которая за несколько минут соберет данные для работы.

Итак, нам нужно использовать функцию count в сочетании с boolean по условию h1>1.

Секреты парсинга для SEO: как это делать правильно и для чего

Страница, на которой искали 2 или больше заголовка Н1:

https://market.yandex.ru/catalog--noutbuki/54544/list

Результат в виде кода:

boolean(count(//h1)>1)

В данном случае условие просто: если Н1 на странице только 1 (или если 0, т.е. его нет), то на выходе мы получаем false. Если H1 несколько, то результат сменится на true.

В принципе, ничто не мешает поставить другое условие, т.е. чтобы:

boolean(count(//h1)≤1)

В таком случае у нас будет возвращаться true, если на странице один Н1 или если он отсутствует. На выходе получим false, если на странице 2 и более заголовков Н1.

На самом деле в код-ревью потом мы сможем еще больше упростить функцию. Дело в том, что по условию count(//h1)≤1) у нас уже выдается boolean-значение true или false.

Задача №8. Как узнать кол-во товаров на листинге и отсечь текст

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

Бывает такое, что узнать кол-во товаров на листинге сложно (особенно когда у нас десятки страниц пагинации). Чтобы решить задачу, нужно попробовать просчитать количество товаров на первой странице листинга, а дальше совершить пару математических операций. Мы видим, что в категорию с конструкторами попали 9526 позиций. Достаем Xpath и работаем.

Секреты парсинга для SEO: как это делать правильно и для чего

Пример страницы, для которой ищем количество товаров:

https://www.detmir.ru/catalog/index/name/konstruktory/

Результат, который получили:

Xpath: //div[@class='wQ']//button[2]

В out находится текст «9526 товаров». Нам не нужно слово «товаров», а требуется только цифра. Для этого используем другую интересную функцию – substring-before(). Благодаря ей отсекаем слово «товаров» и получаем в out цифру 9526.

Итоговый запрос, который необходимо было составить для страницы, выглядит таким образом:

Xpath: substring-before(//div[@class='wQ']//button[2], ' товаров')

Задача №9. Вычистить значения от лишних пробелов

Если зайдем в Н1, видим странные значения с большим количеством пробелов. Если парсить их, в будущем потом неудобно использовать. Чтобы исправить ситуацию, нужна функция normalize-space().

Секреты парсинга для SEO: как это делать правильно и для чего

Код выглядит максимально просто и понятно даже для новичка:

normalize-space(//h1).

Задача №10. Получить ссылки на изображения

Мы переходим в интернет-магазин МВидео, чтобы спарсить все ссылки на картинки с листинга.

Картинка лежит в DIV с нужным нам классом «mobile-img ng-star-inserted». Дальше осталось при помощи функции contains настроить выбор разрешения (размера). В out появятся список изображений.

Секреты парсинга для SEO: как это делать правильно и для чего

Страница интернет-магазина, для которой искали картинки с нужным разрешением:

Результат в виде написанного кода для работы:

Xpath //div[@class='mobile-img ng-star-inserted']//picture//source/@srcset[contains(., '/200/')]

и //div[@class='mobile-img ng-star-inserted']//picture//img/@src

Вариантов, как работать с XPath, еще больше. Рекомендуем посмотреть воркшоп "Начало начал и основа основ – секреты парсинга”, чтобы узнать все подводные камни и секреты. Наш специалист Сергея Горобий рассказывает:

  • Парсинг с Screaming Frog. Краткие основы + фишки.
  • Как получить «болванку» или неполный контент. Что делать дальше?
  • Что делать если заблокировали?
  • Что делать если все перепробовали, а результата все равно нет?
  • BONUS. Пишем бота через BAS
2424
26 комментариев

Очень грамотно расписано!

1
Ответить

146%, а если еще больше активностей и лайков подкрутить будет вообще шикарно)

Ответить

ну хз... все это есть в инструкциях к парсерам, которыми пользуешься. Пользуясь случаем оставлю линк на ContentDownloader. https://sbfactory.ru/ я один из первых пользователей, активно участвовал в тестировании. Прога очень крутая, но немного трудна в освоении.

1
Ответить

А сайты с защитой вроде еаптеки или кинопоиска нормально распаршиваются? или в любом случае прибегать к кастому придется?

Ответить

Спасибо за подробный и неординарный гайд) Наконец-то просто и понятно объяснили что такое парсинг!

Ответить

Ух ты, как раз регистрация 12 октября и первый комент, классно!

1
Ответить

Вау, крутой разбор!
Статья достойна быть на хабре, очень полезный материал)

Ответить