×
Россия +7 (495) 139-20-33

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

Россия +7 (495) 139-20-33
Шрифт:
0 7627
Подпишитесь на нас в Telegram

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

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

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

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

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

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

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

Вручную в браузере. Вы можете использовать для этого расширения, такие как ScraperData 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
Накрутка поведенческих факторов: дорого, сложно, но можно. Если очень хочется
Oleg_bobr2012
1
комментарий
0
читателей
Полный профиль
Oleg_bobr2012 - Мда...Может Анне сразу в Яндекс написать кейсы по накрутке ПФ. Я бы такого сотрудника гнал вон.
28 способов повысить конверсию интернет-магазина
Татьяна
1
комментарий
0
читателей
Полный профиль
Татьяна - Очень действенные рекомендации представлены в статье! Всё четко расписано и легко внедряемо в работу интернет-магазинов.Удобство и наглядность+различные бонусы и скидки-именно то, что и цепляет покупателя.
Создали ресурс для металлургов, который позволяет следить за аналитикой рынка и осуществлять продажи
Наталья Сталь
3
комментария
0
читателей
Полный профиль
Наталья Сталь -
Какие сайты лидировали в поиске Яндекса и Google в 2023 году
Гость
1
комментарий
0
читателей
Полный профиль
Гость - Если что по рейтингу вы не правы, есть ядро по которому производиться оценка и вы можете по нему самостоятельно все посмотреть. Единственный объективный рейтинг по SEO. Других не знаю Ну я вам скажу что это не так и в предыдущие года сайт моего клиента попадал в рейтинг, при чем несколько раз. И я прекрасно знал еще до объявления результатов кто лидер - рейтинг прозрачный, есть фразы по которым набираются баллы. В этом году наш сайт не попал в рейтинг например и это было понятно, что не попадет (по статистике позиций)
5 способов увидеть сайт глазами поисковика: анализируем скрытый контент и cloaking
Гость
1
комментарий
0
читателей
Полный профиль
Гость - Сейчас клоаку прячут, так что под нее можно глянуть только с гуггловских ip. Сейчас только гуггл сервисами можно глянуть
Простые SEO-работы, которые могут увеличить прибыль компании. Часть 1
roma.lisov
1
комментарий
0
читателей
Полный профиль
roma.lisov - Воспользовался советом по проверке и настройке картинок на сайте – реально дельный совет. Вот вроде и просто, казалось бы, а мне в голову раньше не пришло. А такие нюансы, конечно, нужно знать)
Как продвигать сайт на Tilda: особенности продвижения и рекомендации специалистов
Konstantin Bulgakov
15
комментариев
0
читателей
Полный профиль
Konstantin Bulgakov - Спасибо за рекомендации, полезно. Но кажется, что тематика в кейсе не самая конкурентная + часть запросов в продвижение брендовые, там и без сео позиции будут в топе.
Простые SEO-работы, которые могут увеличить прибыль компании. Часть 2
dayitrix
1
комментарий
0
читателей
Полный профиль
dayitrix - Ну да, для начала важно хотя бы необходимый минимум работ провести, настроить все как положено. А уже потом в более далекие дебри SEO-оптимизации лезть. А то многие ни с того начинают и потом удивляются, почему результата нет.
Яндекс встроил нейросети в свой Браузер
RasDva
12
комментариев
0
читателей
Полный профиль
RasDva - О дааааа)
Как мы увеличили поисковый трафик на 30% с помощью ChatGPT
Светлана Светлана
23
комментария
0
читателей
Полный профиль
Светлана Светлана - Я сама работаю в маркетинге и недавно решила еще дополнительно пройти курсы по интернет маркетингу astobr.com/services/povyshenie-kvalifikatsii/menedzhment-upravlenie/internet-marketing/ , как по мне эти знания которые я получила, очень помогают мне в работе
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
388
Комментариев
373
Комментариев
262
Комментариев
249
Комментариев
171
Комментариев
156
Комментариев
141
Комментариев
121
Комментариев
120
Комментариев
100
Комментариев
97
Комментариев
97
Комментариев
96
Комментариев
80
Комментариев
77
Комментариев
74
Комментариев
67
Комментариев
64
Комментариев
60
Комментариев
59

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