XPath
🔗 Оригинальная страница — Источник данного материала
Описание
Это язык запросов, который позволяет находить нужные элементы и атрибуты в XML и (X)HTML документах. Проще говоря, с его помощью можно указать путь к нужному элементу в структуре документа и быстро получить к нему доступ.
XPath является стандартом консорциума W3C и широко используется при работе с DOM-структурой страниц и XML-файлов.
Как используется XPath в ZennoPoster?
- Для парсинга данных с сайтов;
- Для поиска и взаимодействия с элементами на веб-странице:
- В конструкторе действий.
С помощью XPath можно реализовать более универсальный и устойчивый к изменениям вёрстки сайта алгоритм поиска данных в сравнении с регулярными выражениями. Данный язык запросов позволяет значительно упростить логику парсеров и тем самым ускорить их разработку.
Тестирование запросов
- В ZennoPoster встроен Тестер X\Json Path с помощью которого можно протестировать составленное выражение.
- Так же составить и протестировать XPath можно в окне Инcтрументов web-разработчика: откройте окно DevTools, нажмите
CTRL+Fдля вызова строки поиска и введите в неё XPath выражение.

Например, чтобы получить названия мероприятий на сайте http://w3.org, мы можем использовать следующее выражение:
//*[@id="w3c_home_upcoming_events"]/ul/li//a
Базовый синтаксис
Пути
| Выражение | Описание |
|---|---|
. | текущий контекст |
.// | рекурсивный спуск (на ноль или более уровней от текущего контекста) |
/html/body | абсолютный путь |
a | относительный путь |
//* | все в текущем контексте |
li//a | ссылки, являющиеся «внуками» для li |
//a | //button | ссылки и кнопки (объединение двух множеств узлов) |
Отношения
| Выражение | Описание |
|---|---|
a/i/parent::p | непосредственный родитель <p> |
p/ancestor::\ | все родители |
p/following-sibling::\ | все следующие братья |
p/preceding-sibling::\ | все предыдущие братья |
p/following::\ | все следующие элементы кроме потомков |
p/preceding::\ | все предыдущие элементы кроме предков |
p/descendant-or-self::\ | контекстный узел и все его потомки |
p/ancestor-or-self::\ | контекстный узел и все его предки |
Получение узлов
| Выражение | Описание |
|---|---|
/div/text() | получить текстовые узлы |
/div/text()[1] | получить первый текстовый узел |
Позиция элемента
| Выражение | Описание |
|---|---|
a[1] | первый элемент |
a[last()] | последний элемент |
a[2] | вторая ссылка |
a[position() <= 3] | первые 3 ссылки |
ul[li[1]=”OK”] | список (UL), первый элемент которого содержит значение OK |
tr[position() mod 2 = 1] | не четные элементы |
tr[position() mod 2 = 0] | четные элементы |
p/text()[2] | второй текстовый узел |