- Регистрация
- 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 запросы актуальны и выполняют своё назначение.
Спасибо за ваше внимание, лучшая благодарность для автора будет ваш голос
- Тема статьи
- Другое
- Номер конкурса статей
- Седьмой конкурс статей
Вложения
-
31,3 КБ Просмотры: 1 647
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование: