×
Россия +7 (909) 261-97-71

Начало начал и основа основ: секреты парсинга

Россия +7 (909) 261-97-71
Шрифт:
0 9845
Подпишитесь на нас в MAX

Парсинг – нулевой этап работы с аналитикой для любого SEO-специалиста. Перед тем как начать данные анализировать, в первую очередь требуется корректно их собрать. В SEOWORK данные собираются регулярно и в больших масштабах, поэтому специалисты компании отлично владеют инструментами парсинга и готовы поделиться навыками с вами! 

Данная статья написана по следам воркшопа «Начало начал и основа основ – секреты парсинга» от  Сергея Горобий, руководителя отдела аналитики SEOWORK.  

Что это такое и зачем? Парсинг vs Скрапинг vs Краулинг 

Парсинг – это структуризация и синтаксический разбор неструктурированных данных. Краулинг – это обход страниц сайта и сбор неструктурированных данных. Скрапинг – объединяет в себе первые 2 понятия: это и обход ссылок, и сбор данных, а также разбор и структуризация.  

В SEOWORK вы можете встретить парсинг при сборе: 

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

Как можно парсить данные?  

Вручную в браузере. Вы можете использовать для этого расширения, такие как Scraper, Data Scraper. Этот способ подходит для небольшого количества страниц.  

Пример сайта

Используя десктопные приложения. Для 1000 и более страниц помогут инструменты Screaming Frog, A-Parser, Content Downloader.  

С помощью надстройки в Excel (ParserOK).  

Прямым парсингом в Google Таблицы (функции IMPORTXML и IMPORTHTML).  

И еще много других способов и парсеров (см. статью). 

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

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

1. Самые популярный – CSS selector (CSSPath) 

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

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

2. Xpath selector (удобное расширение для браузера) 

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

Изначально использовался для xml, но также актуален и для html-структуры. В отличии от CSS-селектора он может обращаться в глубину и обратно – можно провалиться в родительскую ноду/элемент и после вернуться обратно. Он предпочтительнее, так как это передвижение по осям закрывает множество потребностей для парсинга.  

3. jQuery selector 

XPath 

Работать с XPath можно через copy XPath непосредственно через интерфейс браузера, но лучше прописывать путь XPath самостоятельно. Казалось бы, что копировать путь – достаточно для получения необходимых данных, но как показывает практика, без синтаксиса все равно не обойтись.  

Поэтому давайте разберем синтаксис XPath подробнее. 

Для работы с XPath мы используем ноды (ссылка): 

Ноды

предикаты (ссылка): 

предикаты

Оси (ссылка): 

Оси

а также операторы (ссылка): 

Операторы

Функции 

Облегчить работу с данными можно еще на этапе подготовки к парсингу, используя функции XPath.  

Основные полезные функции: 

  • count(),
  • last() / position(),
  • string-length(), 
  • contains(), 
  • starts-with() или ends-with(), 
  • boolean(), 
  • substring-before() или substring-after(), 
  • normalize-space(). 
Больше функций (источник 1, источник 2, источник 3). 

Задача #1. Собрать с листинга все ссылки на товары, которые стоят больше 50 руб. 

Пример парсинга

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

Пример парсинга

И тут же мы можем ограничить вывод данных через какое-то условие, например, больше 50 руб. Обращаемся к ноде через точку и задаем условие.  

Страница, на которой работал: 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] 

Как вы видите, в out выводятся пока только числа. Как достать ссылки товаров? Обратимся к структуре и увидим, что ссылка находится по структуре выше, чем div.  

Пример парсинга

То есть наша цена вложена в эту ссылку, и так как мы используем 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” – функция подсчета. Например, мы выбрали все товары на странице и хотим посчитать их количество на странице.  

Пример сайта Лента

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

Страница, на которой работал: https://lenta.com/catalog/hleb-i-hlebobulochnye-izdeliya/vypechka/izdeliya-iz-sdobnogo-testa/ 

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

Задача #3. Как посчитать количество символов в статье 

Находим в структуре элемент, в котором располагается вся статья, в нашем случае обращаемся к div с атрибутом itemprop со значением articleBody.  

Пример

Выделили в граф весь текст статьи и переходим к подсчету количества символов, используя функцию string-length. 

Страница, на которой работал: https://club.dns-shop.ru/digest/78762-ryzen-9-7950x-okazalsya-do-26-medlennee-core-i9-13900k-v-cinebe/ 

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

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

Следующая полезная функция – contains. По ней можно находить различные элементы, которые содержат, например, определенный текст. Разберем на примере Окко.  

У нас есть страница-коллекция, и мы хотим забрать с нее все линки карточек фильмов, не затрагивая карточки, в которых располагаются сериалы. 

Пример

Для начала обратимся к графу всех карточек в верхнем уровне, выбираем этот граф. Получилось 20 карточек (отмечаем, что есть url двух структур – movie и serial, по ним и будем разграничивать фильмы и сериалы). После чего обращаемся к линкам и задаем нужные условия (фильтрация по movie).  

Фильтрация

Страница: https://okko.tv/collection/russian-fantasy-col  

Получаем: //div[@class='_3JAWn']//a[contains(@href, '/movie/')]/@href 

По итогу видим, что в выборке остается 16 карточек фильмов.  

Задача #5. Фильтрация по тексту 

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

Страница: https://lenta.com/catalog/hleb-i-hlebobulochnye-izdeliya/vypechka/izdeliya-iz-sdobnogo-testa/ 

Пример

Найдем на листинге div с названием карточек и отфильтруем по названию. Прописываем «A»-предикат, через точку обращаемся к самой ноде и уже тут задаем, какое название нам необходимо, например, «Ватрушка».    

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

пример

Находим 2 подходящих товара.  

Задача #6. Поиск элементов, которые начинаются или заканчиваются с нужного значения 

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

Парсинг

Страница: https://okko.tv/collection/russian-fantasy-col  

Получаем: //div[@class='_3JAWn']//a[starts-with(@href, '/movie/')]/@href 

Задача #7. Дублируются ли заголовки H1 на странице?  

Функция boolean отдает бинарное значение true/false на заданное нами условие. Например, есть задача найти страницы, где могут дублироваться несколько H1. Если вы нашли их на какой-то странице и хотите убедиться, что на других страницах сайта такой проблемы нет – это легко сделать через функцию boolean.  

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

Парсинг

Страница: https://market.yandex.ru/catalog--noutbuki/54544/list 

Получаем: boolean(count(//h1)>1) 

Если на странице H1 не дублируется и только один, то в out мы будем получать false. Если же H1 на странице несколько, то в out мы получим true. 

Задача #8. Узнать количество товаров на листинге + отсекаем текст 

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

Парсинг

Страница: https://www.detmir.ru/catalog/index/name/konstruktory/ 

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

Но мы видим в нашем out текст «9526 товаров». Воспользовавшись функцией substring-before(), мы можем отсечь значение “ товаров” и в out получим только число 9526. 

Страница: https://www.detmir.ru/catalog/index/name/konstruktory/ 

Xpath: substring-before(//div[@class='wQ']//button[2], ' товаров') //итоговый запрос// 

Задача #9. Как собрать значения без лишних пробелов?  

Например, мы планируем спарсить все H1, но откуда-то появились странные пробелы. Исправить ситуацию быстро можно функцией normalize-space().  

Парсинг

Для этого прописываем xpath normalize-space(//h1).  

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

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

Парсинг

Страница, на которой работал: https://www.mvideo.ru/sadovaya-tehnika-i-oborudovanie-8027/vozduhoduvki-9489 

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

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

Еще больше примеров работы с XPath вы узнаете из воркшопа «Начало начал и основа основ – секреты парсинга».

Есть о чем рассказать? Тогда присылайте свои материалы Марине Ибушевой


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Отправить отзыв
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
Как ChatGPT выбирает компании для рекомендаций: что уже известно и как бизнесу подготовиться к эпохе AI Search
Игорь Антонов
1
комментарий
0
читателей
Полный профиль
Игорь Антонов - Для молодых сайтов в YMYL-тематиках я бы добавил отдельный блок про согласованность сущности: одинаковые название, телефон, адрес и перечень услуг на сайте, в картах, каталогах и профильных публикациях. Мы сейчас проверяем это на новом медицинском проекте narkologmsk.ru — без массовых анкорных ссылок, через подтверждённые карточки и содержательные материалы. Было бы полезно увидеть в продолжении сравнение источников, которые чаще цитируют Google AI Overviews и ChatGPT именно для локальных запросов.
Мы сократили рутину SEO-специалиста на 95% – вот архитектура, которая это сделала
Гостьkorayaskin
2
комментария
0
читателей
Полный профиль
Гостьkorayaskin - Можно также посмотреть разбор инструментов типа KeywordKick — помогает быстрее понять, где именно конфликт сигналов.
Рынок безалкогольных напитков в 2026 году: как категория продает через доверие к бренду
Алексей
1
комментарий
0
читателей
Полный профиль
Алексей - Все бы хорошо, но это в прошлом. В 2026 г. о росте 2020-2025 гг. остается только мечтать. Рынок БАН перешел к снижению. К серьезному снижению.
Яндекс открыл продажи через Алису и Поиск для продавцов без сайтов
Дмитрий Орлов
1
комментарий
0
читателей
Полный профиль
Дмитрий Орлов - Прикольно, покупать через колонку-))
Яндекс выложил в опенсорс языковую модель, которая лежит в основе быстрых ИИ-ответов в Поиске
Роман Каржонков
1
комментарий
0
читателей
Полный профиль
Роман Каржонков - Молодцы! Такие AI-модели могут широко используется в корпоративных, обучающих и научных АI-enabled платформах.
Сервисы для создания квизов: сравнение по конверсии, гибкости сценариев и интеграциям
Виктор
1
комментарий
0
читателей
Полный профиль
Виктор - Без сервиса FormDesigner.ru эта подборка будет не полной. Удивлен, почему вы его не включили в список?
5 полезных сервисов для работы с учебными текстами
Anna B.
2
комментария
0
читателей
Полный профиль
Anna B. - Отличный разбор, очень своевременно!
Сайт компании в 2026 году: что проверяет Роскомнадзор и как не получить штраф
Олег Черников
1
комментарий
0
читателей
Полный профиль
Олег Черников - Дима спасибо, отличный обзор! За ГОСТ Р 52872-2019 спасибо! Давно около него ходил.
Рейтинг GEO-агентств для ecom в России: как продвигать интернет-магазин в нейросетях
Игорь
6
комментариев
0
читателей
Полный профиль
Игорь - Как раз сейчас пытаемся продвинуть свой интернет-магазин спортивных товаров для нейросетей, чтоб почаще нас упоминали. Работаем с Zenlink. Привлекло то, что у них есть реальные кейсы и к работе адекватно подходят. Сначала заказали просто анализ, чтоб они проверили, как нас вообще нейросети упоминают. Интересовала Алиса, ЧатГпт, и ДипСик. Там конечно все довольно печально было... Упоминаний мало. Но после того как мы свой сайт оптимизировали по их советам и они выполнили аутрич, плюс GERM, упоминаться стали чаще. В Алисе и ГПТ особенно, в ДипСик поменьше рост, но тоже есть. Это воодушевляет, конечно. И даже было пару клиентов, которые нас именно через нейросеть нашли. Сейчас опрос проводим, чтоб реальную пользу для себя понять. И вот, она уже есть. На мой взгляд эта услуга подходит тем бизнесам у кого большой средний чек, тогда даже пару клиентов с лихвой отбивают затраты на такое продвижение.
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
393
Комментариев
373
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
142
Комментариев
130
Комментариев
121
Комментариев
100
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
80
Комментариев
77
Комментариев
74
Комментариев
67
Комментариев
66
Комментариев
60
Комментариев
59

Отправьте отзыв!
Отправьте отзыв!