Как парсить выдачу Google и Яндекс с помощью XPath?

Статья для начинающих о том, как быстро парсить поисковую выдачу Google и Яндекс с помощью Xpath — декларативного языка запросов к элементам xml или xhtml документа.

Для парсинга можно, конечно, воспользоваться специализированным софтом, например, программой Human Emulator, которая автоматизирует работу в браузере. И с помощью, которой можно не только парсить, но и решать широкий спектр задач по вводу и получению данных. Но наша задача — демонстрация возможностей языка XPath для парсинга сайтов.

Задача:

— получить данные из ТОП100 выдачи Google и Яндекс (title, url, decription)

Для работы нам понадобиться:

1. Браузер Chrome или Firefox (инструменты разработчика)
2. Элементарные знания XPath (https://www.w3schools.com/xml/xpath_intro.asp)
2. Любой тестер запросов XPath, например, такие расширения для Chrome и Firefox, как XPath Helper Wizard или XPather. Я в примерах использую Chrome и XPath Helper Wizard.

Как пользоваться инструментами разработчика, надеюсь, все знают.

Парсим выдачу Google.

Перед, тем как мы начнем парсить, давайте перейдем в настройки поиска Google и установим максимальное значение «Результатов на страницу» — 100 результатов.
Количество результатов на страницу в Google

Парсить выдачу будем по неожиданному запросу «инструменты фрилансера».

Получаем title первого сайта из выдачи Google.

Вводим запрос и в инструментах разработчика (Ctrl + Shift + C) исследуем title первого сайта из выдачи. По чудесному стечению обстоятельств это наш блог ).
Первый сайт в выдаче по запросу

В инструментах разработчика кликаем правой кнопкой мыши по найденному коду элемента и выбираем «Copy» > «Copy XPath».
Получаем XPath запрос

Запускаем наш тестер запросов и вставляем, скопированный XPath запрос.

//*[@id="rso"]/div[1]/div/div/div/h3/a

Получаем title первого сайта из выдачи

Как видите, мы получили title первого сайта из выдачи.

Получаем title всех сайтов из выдачи Google.

Теперь получим title для всех сайтов из выдачи. Для этого перед первым дивом поставим еще один слеш.

//*[@id="rso"]//div[1]/div/div/div/h3/a

Получаем title всех сайтов из выдачи

 

Получаем все ссылки из выдачи Google.

Для получения всех ссылок, просто меняем тег «а» (текст) на «@href» (url).

//*[@id="rso"]//div[1]/div/div/div/h3//@href

Получаем все ссылки из выдачи Google

 

Получаем description первого сайта из выдачи Google.

Для получения description первого сайта из выдачи, проделываем все вышеперечисленные операции (исследуем элемент, копируем код XPath, вставляем полученный код в тестер запросов).

//*[@id="rso"]/div[1]/div/div/div/div/div/span

Получаем description первого сайта из выдачи Google

Получаем description всех сайтов из выдачи Google.

Для получения description всех сайтов из выдачи, опять же, добавляем слеш перед первым дивом.

//*[@id="rso"]//div[1]/div/div/div/div/div/span

Получаем все description из выдачи Google

 

Парсим выдачу Yandex.

Переходим в настройки поиска и устанавливаем количество результатов на страницу равное 50.
Устанавливаем количество результатов в выдаче Яндекса

Получаем title первого сайта из выдачи Яндекса.

По аналогии с парсингом выдачи Google получаем title первого сайта в выдаче.

/html/body/div[2]/div[1]/div[3]/div[1]/div[1]/ul/li[1]/div/h2/a

Получаем title первого сайта в выдаче Яндекса

 

Получаем title всех сайтов из выдачи Яндекса.

Для получения title всех сайтов, удаляем номер отдельного элемента «[1]» списка «/li»

/html/body/div[2]/div[1]/div[3]/div[1]/div[1]/ul/li/div/h2/a

Получаем все title из выдачи Яндекса

 

Получаем все ссылки из выдачи Яндекса.

/html/body/div[2]/div[1]/div[3]/div[1]/div[1]/ul/li/div/h2//@href

Получаем все ссылки из выдачи Яндекса

 

Получаем description первого сайта из выдачи Яндекса.

/html/body/div[2]/div[1]/div[3]/div[1]/div[1]/ul/li[1]/div/div[2]/div

Получаем description первого сайта из выдачи Яндекса

Получаем description всех сайтов из выдачи.

/html/body/div[2]/div[1]/div[3]/div[1]/div[1]/ul/li/div/div[2]/div

Обратите внимание — количество результатов всех description из выдачи (55) отличается от количества всех title и urls (54).

Получаем description всех сайтов из выдачи Яндекса

Произошло это, потому, что на странице выдачи Яндекса у сайта, находящегося в рекламном блоке, description размещен в двух блоках.

Description в две строки в выдаче Яндекса

 

Отслеживайте количество результатов в анализаторе запросов XPath. Количество title, description и url должно быть одинаковым, иначе при сохранении результатов парсинга в Excel документ произойдет путаница.

В данном случае, необходимо в анализаторе запросов найти и удалить лишний description.

Полученные результаты, можно сохранить в таблицу Excel. Получаем все title, сохраняем в первую колонку, url — во вторую, description — в третью. Если, есть необходимость, можно пройтись по всей выдачи.

Таким образом, за минуту собираем необходимые данные.

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

ужасноплохонормальнохорошоотлично (Пока оценок нет)
Загрузка...