Статьи

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

e9416100dd4679fd575a851735aa0354

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

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

Оглавление

Что же все-таки это такое и для чего? Парсинг vs Скрапинг vs Краулинг 

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

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

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

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

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

39e7088b4a070750e0b05b09f6f261a3

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

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

Прямым парсингом в Гугл Таблицы (функции 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 мы используем ноды (ссылка): 

bedbfc09c9c4eedf6fcdde4b4b37a2e8

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

8109a3a15a2a7f9ee120e12ea72754be

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

1a3ff4fecbdd6616bc6ce74bdad9ab96

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

dd3a796f786176270dd937b131607bc7

Функции 

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

Главные полезные функции: 

  • count(),
  • last() / position(),
  • string-length(), 
  • contains(), 
  • starts-with() либо ends-with(), 
  • boolean(), 
  • substring-before() либо substring-after(), 
  • normalize-space(). 

Больше функций (источник 1, источник 2, источник 3). 

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

dd530fd1c83a498418b2e871a40270ad

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

83db263a47e4593d629ced9496dced8a

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

92b0b5a0ce30898fbe5abcc40a1b40f3

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

e76edaaeb6f7dff49b806e39c2598c4c

В итоговом файле у нас будут лишь все текстовые значения, которые выведены в блоке справа, а мы желаем получить конкретно цифровое значение. Потому прописываем функцию 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.  

135192da55811b3cfbbc737f68335c99

Выделили в граф весь текст статьи и перебегаем к подсчету количества знаков, используя функцию 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. По ней можно отыскивать разные элементы, которые содержат, к примеру, определенный текст. Разберем на примере Окко.  

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

c25c154dee51d5e2912a9ea138b33b68

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

afcbb8fea03882dd1c0aba5cf08bd1c0

Страничка: 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/ 

1b53abe32bfbd424b9935d926eda2720

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

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

ed35a217af0a82da49ff56cdf7105e84

Находим 2 пригодных продукта.  

Задачка #6. Поиск частей, которые начинаются либо завершаются с подходящего значения 

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

08483fc2e62cb31cf88eb20e904cae64

Страничка: 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. 

0fd0b4d88156d26d9e79e7dbaa038331

Страничка: https://market.yandex.ru/catalog–noutbuki/54544/list 

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

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

Задачка #8. Выяснить количество продуктов на листинге + отсекаем текст 

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

d8899d1fb7338286911ced8507fd72c8

Страничка: 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().  

78d43d47b1ab60e6693eb6358830df3e

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

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

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

2a48e3cd6a4fd0171e85f04705a94bee

Страничка, на которой работал: 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 вы узнаете из воркшопа «Начало начал и база основ – секреты парсинга».

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Back to top button