Статьи

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

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 не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
full sex telugu indianpornxclips.com desisexvidieo حيوانات بتنيك بنات pornvideoswatch.net فيديوهات خالد يوسف سكس indian ladies fuck tubekitty.mobi pornwoman sexyfim tubepatrolporn.net cbsam اجمل نيك محارم sexdejt.org ناكها
xxx gonzo pornscan.mobi bangle sex different world girl hentaitgp.com hentai queens blade ikaw at ikaw superpinoy.net darna december 2 ji chang wook gf sikwap.mobi ww com xxxxx bengali blue film sexy themovs.info bengali hd sex
sex tips tamil erodrunks.net sex purn افلام سكس جامدة جدا annarivas.net نيك منزلى سكس مص ابزاز myvippy.com زب اسود طويل رقص سكي ohtube.net سكس امريكى نار بزاز مصرية ملبن teenagesexvids.com سكس محارم أمهات