- Регистрация
- 10.12.2012
- Сообщения
- 157
- Реакции
- 186
- Баллы
- 43
Большой привет всему Community Zennolab
Сегодня проведем небольшой разбор языка запросов xPath и его применении в ZennoPoster.
Также напишем несколько заготовок-болванок, чтобы наши знания закрепились на практике)
Дисклеймер
В статье используется мат

XPath — это язык запросов к элементам html документа. Чтобы получить интересующие данные, необходимо всего лишь создать запрос, описывающий эти данные. Остальную работу за вас выполнит интерпретатор языка xPath. @AlexeyKuzmin
Инструментарий:
- Браузер на базе движка Chromium. Браузер Google Chrome или Vivaldi (не реклама) четкий прост)
- Плагин xPather https://github.com/Simek/XPather ссылка на Google Store
- Базовые знания HTML тегов
- Базовая логика (дедукция и индукция)

- Знание синтаксиса xPath часто используемые:
- ancestor (предок, батя)
- descendant (потомок, пезд*к)
- starts-with (начинается с)
- contains(содержит ключевое слово)
- Понять основные принципы построения xPath запросов

Работать будем с разделом мобильных телефонов.
Справедливости ради, хочу заметить, что работать будет с любым разделом, Вам необходимо лишь будет изменить id в url на свои.
Начнем с Бати.
Данная картинка соответствует тому, что у одного Бати, есть несколько Пезд*ков, которые в свою очередь являются Батями для других, количество элементов и степень их родства ограничивается лишь фантазией человека, который все это дело верстал.
Для того, чтобы наш xPath запрос вернул нужный нам элемент, необходимо будет построить маршрут от Бати к Пезд*ку*
*

Закрепим на практике
Переходим на страничку Яндекс.Маркета -> Мобильные телефоны
Активируем xPather в появившемся окне набираем наш "первый" xPath запрос -
Код:
//div[@class='snippet-card__view']
Мы нашли div у которого название класса соответствует snippet-card__view.
Разберем структуру xPath запроса:
- // - Две косые черты, просто запоминанием, что все начинается с них
- div – мы говорим, что будем искать в html коде все div (это может быть любой html тег)
- [Тут будет запрос] – в этих скобках, будет проходить вся работа.
- @class = собачка вначале обязательно, искать только те div у которых есть class
- 'snippet-card__view' находим только тот class, у которого имя snippet-card__view, не забываем про верхние апострафы ' '
Усложним задачу.
Получим все отзывы. Посмотрим, как лучше составить xPath запрос
Попробуем обратиться к элементу «Отзывов» напрямую, минуя Батю.
Открываем xPather и набираем в поле по аналогии.
Код:
//span[@class='small']
Хапнули лишнее, ну ничего, попробуем изменить запрос, задействуем ключевое слово descendant.
А вот и Батя

Разберем построение xPath запроса при использовании descendant
Код:
//[запрос к бате]/(косая черта)descendant(ключевое слово)::(два двоеточия)[запрос_к_пезд*ку]
Код:
//div[@class='snippet-card__content']/descendant::span[@class='small']
Мои поздравления, если вы до сих пор читаете этот бред

Дальше будет интереснее

- contains(@class, 'имя_класса') – возвращает true, если первая строка содержит вторую, иначе возвращает false.
Примеры этой функции будут в изобилии доступны исходном коде приложенного проекта.
- starts-with(@class, 'имя_класса') - возвращает true если первая строка начинается со второй, иначе возвращает false.
Вернемся в Yandex.Market
Продолжим погружение

Нам необходимо определить общий xPath класс Бати.
При изучении исходного кода страницы, мы можем заметить одинаковый тег data-id, к нему мы и привяжемся
Построим следующий xPath запрос:
Код:
//div[starts-with(@data-id, 'model-')]
Примечание
Весь свет на теге div не сошелся, мы можем использовать и другие теги, чтобы построить xPath запрос, старайтесь идти по пути наименьшего сопротивления и задействовать готовые функции, которые доступны в языке xPath, иначе со временем Ваш запрос будет похож на вот такой кусок
Код:
/html/body/div[1]/div[4]/div[2]/div[1]/div[2]/div[1]/div[1]/div[3]/div/div[1]/div/h3/a/span
Теперь начнем применять наши знания по назначению, в рамках ZennoPoster-а

Поставим задачу «Спарсить следующую информацию со странички Яндекс.Маркета» :
- Получим название товара
- Получим стоимость товара от и до
- Получим рейтинг товара
- Получим количество отзывов
- Получим ID товара, чтобы потом можно было парсить внутренние странички.
- Получим комментария к товару
Основная наша работа будет проходить на языке программирования C#.
В ZennoPoster доступны специально написанные классы HtmlElement и HtmlElementCollection
Описании работы и заготовки-болванки в прикрепленный проекте.
На момент 15.05.2017 года. xPath запросы актуальны и выполняют своё назначение.
Спасибо за ваше внимание, лучшая благодарность для автора будет ваш голос
- Номер конкурса статей
- Седьмой конкурс статей
- Тема статьи
- Другое
Вложения
Последнее редактирование:






