кардинг

 

ПРОСТО О СЛОЖНОМ

В данной статье расскажу о том, как с помощью Google Таблиц и XPath можно очень быстро и легко парсить данные с сайтов. А сегодня наша легенда такая: мы хотим постоянно отслеживать выставленные на продажу Volkswagen Passat. При этом нам удобнее, когда данные представлены в виде таблицы, которая постоянно доступна по ссылке. К слову: таким методом можно отслеживать и комментарии к вашим профилям в соцсетях и все что угодно.

ВВЕДЕНИЕ
С целью мы определились, теперь немного об используемых инструментах:
  • Google Таблицы
  • Запросы XPath
  • Консоль браузера (в моем случае Mozilla Firefox)
Вот в принципе и все, хочу дополнить, что на самом деле этот метод парсинга очень удобен и весьма быстр, однако есть «однако».     Для серьезного парсинга с вложенностью связка Google Таблицы и XPath не подходит, это проверено на собственном опыте. Но для парсинга одной или нескольких страниц – это, на мой взгляд, наиболее быстрый способ.

Что вы узнаете:
  • Как составлять простой XPath запрос
  • Как проанализировать код HTML
  • Как убить время впустую

 

Теория


Основное действие будет происходить в Google Таблице. Нас также интересует функция IMPORTXML, которая имеет следующий синтаксис:

IMPORTXML(ссылка; запрос_xpath)

ссылка – адрес веб-страницы с указанием протокола (например, http://).

Значение параметра ссылка должно быть заключено в кавычки или представлять собой ссылку на ячейку, содержащую соответствующий текст.

запрос_xpath – запрос XPath для поиска данных.

Подробнее читайте здесь

Теперь немного о XPath.

XML Path Language (XPath) – это язык, разработанный специально для использования с XML и применяемый для поиска узлов и наборов узлов XML-документа в таких технологиях, как DOM и XSLT. В статье мы не будем рассматривать его подробно, ограничимся лишь необходимыми для нашей задачи выражениями.

 

Начинаем

 

И так, поехали. Первым делом мы открываем Google Таблицы и создаем новый документ:

 

 

Теперь временно бросаем таблицы и идем на kolesa.kz, где выставляем нужные фильтры и получаем результат. Я в качестве примера выставил следующие фильтры:

  1. Легковые
  2. Где искать – Костанайская область
  3. Марка - Volkswagen Passat
  4. С пробегом
  5. С фото

После того, как выставили фильтры, нажимаем «Показать». У меня получилась следующая страница:

 

 

Нам нужна ссылка (которую я коряво обвел). Копируем эту ссылку, возвращаемся к таблице и вставляем ссылку в ячейку A1:

 

 

Теперь возвращаемся на сайт и приступаем к анализу нужных данных

 

Анализ мать их данных

 

Для анализа нам потребуется умение работать с консолью веб-разработчика, в браузере она вызывается с помощью клавиши F12

 

 

Для того, чтобы спарсить нужные нам данные, проматываем страницу вниз, и вот мы видим интересующие нас блоки:

 

 

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

 

 

На рисунке видно,  какие именно данные я хочу получить. Начнем сначала с названия (хотя так как мы изначально определились с маркой - этот пункт необязателен, но если вы, к примеру, выставите фильтр из разных машин, то очень даже будет нужно парсить название).

И так, для начала щелкаем правой кнопкой мыши по названию и выбираем «исследовать элемент». У нас открывается консоль разработчика и выделяется блок кода, принадлежащий выделенному элементу (в нашем случае - название)

 

 

Теперь поднимаемся в консоли на одну строчку вверх и смотрим, что выделяется в документе. У нас снова выделилось только одно название. Можно было составить запрос и на предыдущей строчке, но как мы видим – если подняться выше – там есть класс, он выведет нам именно название простым запросом. Если бы мы остались на предыдущей строчке – запрос бы стал длиннее, а нам это ни к чему, да и смысла в этом нет.

 

И так, мы видим следующую строчку:

<span class="a-el-info-title">

Где “span” – тег, “class” – атрибут, "a-el-info-title" – значение атрибута.

Теперь возвращаемся к нашей таблице, в которую нам надо добавить следующую функцию:

=importxml(A1;"//span[@class='a-el-info-title’]")

Разберем эту строчку, кстати, именно здесь мы задействовали XPath

  1. =importxml() – функция
  2. A1 – ячейка, в которую мы положили нашу ссылку (далее ставим точку с запятой и в кавычках пишем запрос XPath)
  3. После «//» мы пишем нужный нам тег, в данном случае “span”. Если написать просто “span”, то результатом будет вывод всех значений этого тега, а нас интересует конкретный класс, поэтому обращаемся к атрибуту тега и значению атрибута. Для этого открываем квадратные скобки. В XPath атрибут записывается с символом @ вначале, в нашем случае это будет универсальный атрибут «@class». Чтобы указать значение атрибута нам необходимо поставить знак равенства, открыть одинарные кавычки (если кавычки будут двойные, то результатом запроса станет ошибка синтаксиса) и вписать туда значение атрибута, в нашем случае - 'a-el-info-title’.

Ну, вроде как более менее понятно, теперь наконец мы впишем нашу команду. Для этого нажимаем на столбец B, вписываем в строку

=importxml(A1;"//span[@class='a-el-info-title’]")

жмем Enter и – ура, первый результат

 

 

Вот мы и вывели первый интересующий нас массив, теперь идем на сайт за ценой.

 

 

Точно также как и в предыдущий раз находим нужную строку, составляем запрос, возвращаемся к таблице и в столбец С вписываем получившуюся формулу (она идентична первой, за исключением значения атрибута)

 

 

Упс, спарсить то спарсили, но почему цен больше чем автомобилей? Ответ прост: на странице есть еще элементы с аналогичным строением. Чтобы отсеять лишнее, поднимаемся в консоли выше и находим родительский элемент:

 

 

Теперь нам надо переделать запрос. Сначала пишем родительский элемент, потом через разделитель – дочерний:

=importxml(A1;"//div[@class='a-info-top']/span[@class='price']")

Все, теперь меняем запрос в столбце C

 

 

Все, теперь все в порядке, далее нам нужно описание. Вновь идем на сайт.

 

 

Тут простой запрос, идем в таблицы и вписываем

 

 

Все, описание получили, теперь осталось получить город и дату размещения объявления. Снова идем на сайт и находим все это

 

 

Там рядом как раз все, что нам нужно, берем данные и бегом к таблице

 

 

 

Все, наша таблица готова, теперь можем опубликовать ее в интернете, получить ссылку и периодически посматривать. На этом миссия закончена, напомню, что таким методом парсить можно все что угодно, но скорее всего придется дополнительно ознакомиться с синтаксисом XPath. Также напомню еще раз, что для полноценного многоуровневого парсинга способ с гугл-таблицами не годится, а вот знание XPath пригодится всегда. 

Еще один нюанс: если на сайте-доноре изменят классы и прочее – парсер перестанет работать :-)

Cсылка на получившуюся таблицу

 

 

 


 

Напоминаю, что вопросы можно задать в группе https://t.me/newqosgroup