Как парсить, если ты не программист

Руководитель проектов Дмитрий Мирошниченко рассказывает, как быстро спарсить объявления конкурентов в «Яндекс.Директе» через Google Docs.

Не так давно мне нужно было быстро проанализировать пару сотен объявлений конкурентов в Яндекс.Директе. Собирать их вручную — так себе идея. В этой статье рассмотрим, как спарсить их через Google Docs, не обладая при этом навыками программирования.

Где и что смотреть?

Сами объявления можно посмотреть в выдаче:

Объявления Яндекс.Директа в поиске Яндекса.

Но в выдаче это всё смотреть и собирать неудобно. Раньше в Яндексе была ссылка «Все объявления по запросу». Теперь в общем доступе ее нет, зато по ней до сих пор можно пройти. Вот она: https://direct.yandex.ru/search?&text=запрос

Дополняем: https://direct.yandex.ru/search?&rid=213&text=запрос

«Rid» в ссылке — это номер региона, по которому смотрим запросы.»213» — код региона «Москва». Остальные можете нагуглить в поисковике: «список кодов региона яндекса».

Теперь смотрим все объявления по запросу «застройщики москвы и московской области». Видим краткую сводку по ним. Замечаем, что всего 74 объявления — конкурентная тема.


74 объявления по запросу «застройщики москвы и московской области».

Объявления разбиты на страницы по 20 штук. Это нужно учитывать при парсинге. Походив по страницам, видим структуру ссылок: https://direct.yandex.ru/search?&rid=213&text={запрос}&page={номер_страницы}

Вырисовывается схема по которой нам нужно пройтись:

1. Собрать интересующие запросы;
2. По каждому запросу зайти по адресу https://direct.yandex.ru/search?&text={запрос}&rid=213;
3. Узнать сколько есть страниц с объявлениями и пройтись по всем ссылкам https://direct.yandex.ru/search?&text={запрос}&rid=213&page={номер_страницы};
4. На каждой такой странице собрать нужную информацию.

Как искать признаки?

Для каждого элемента нам нужно найти признак уникальности, который его однозначно определяет в HTML коде. Это или тег, или цепочка вложенных тегов, или тег с определённым классом. Потом эти признаки покажем скрипту, чтобы он вытащил то, что нужно.

Для доступа к элементам внутри HTML используем язык запросов xpath. Как им пользоваться покажем на примере.

Пример:

Пройдёмся по всем нашим шагам:

  • Итак, у нас есть список поисковых запросов:

    1. застройщики москвы и московской области
    2. новостройки москвы
    3. новостройки подмосковья
    4. планировка квартир по адресу
  • Берём первый запрос и переходим по ссылке

https://direct.yandex.ru/search?&text=новостройки+москвы+и+подмосковья&rid=213

  • Смотрим код списка объявлений в инспекторе браузера, нажав F12. Видим, что у каждого элемента списка есть класс banner-selection. Его можно принять за признак того, что элемент включен в список:

    Списки объявлений в инспекторе браузера, класс banner-selection можно взять за основу признака элемента списка.

Кстати, заголовков объявлений на странице не видно, но в коде они есть. Заголовок объявления находится внутри дивов с классами ad ad-link. Само объявление находится внутри тега div без классов.


Заголовок объявления находится внутри класса ad-link, текст объявления находится внутри тега div без классов.

В итоге мы определили по какому пути нам надо идти, и какие признаки у элементов которые нам надо спарсить.

Как парсить?

Напомню, заголовок объявления находится внутри дивов с классами ad ad-link. Структура для них div (ad) div (ad-link). Xpath запрос для него будет выглядеть так //div[@class='ad']/div[@class='ad-link']

Классы: ad ad-link
Теги с классами: div (ad) div (ad-link)
xpath запрос: //div[@class='ad']/div[@class='ad-link'

Тут важно понять принцип и усвоить синтаксис.

В гугл таблицах есть функция importxml, у неё два аргумента. Первый — ссылка, второй — запрос xpath.

В первую колонку вставляем нашу ссылку, во вторую функцию importxml.

  1. https://direct.yandex.ru/search?&text=новостройки+москвы+и+подмосковья&rid=213

  2. =importxml (A1;»//div[@class='ad']/div[@class='ad-link']»)


С помощью одной функции можно спарсить все заголовки в гугл докс.

Само объявление находится внутри тега div. У него нет никаких классов. В xpath запросе к нему можно обратиться по номеру.

Теги с классами: div (ad) второй div
xpath запрос: //div[@class='ad']/div[2]

В третью колонку вставляем функцию =importxml (A1;»//div[@class='ad']/div[2]»)


Все объявления с заголовками двумя формулами.

Чтобы потренироваться, сделайте копию моей таблицы.

Наши шаги:

1. Собрать интересующие запросы;
2. По каждому запросу зайти по адресу https://direct.yandex.ru/search?&text={запрос}&rid=213;
3. Узнать сколько есть страниц с объявлениями и пройтись по всем ссылкам https://direct.yandex.ru/search?&text={запрос}&rid=213&page={номер_страницы};
4. На каждой странице собрать заголовки и тексты объявлений с помощью xpath запросов в гугл таблице.

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

Мнение автора и редакции может не совпадать. Хотите написать колонку для «Нетологии»? Читайте наши условия публикации.

Полный текст статьи читайте на Нетология