Подбор Xpath в программе Datacol

Основы работы со сбором данных в Datacol лежат в подборе Xpath. Именно при помощи Xpath мы чаще всего собираем ссылки на товары, пагинацию, категории и нужные данные со страниц. Для проблемных сайтов можно использовать регулярные выражения, но в большинстве случаев можно обойтись только подбором Xpath. В этой статье мы расскажем Вам о тонкостях работы с Xpath.

ПРИМЕР 1. Нужно спарсить текст, тег которого содержит несколько классов или класс/id непостоянный.

Текст

Цифры в классе «product_123» будут меняться на каждой странице с товаром. В этом случае нам поможет оператор contains:

//h1[contains(@class, 'product_')]

Данный оператор будет искать вхождение, а не точное соответствие. В кавычках пишем только постоянную часть, в данном случае ‘product_’.

После знака @ не обязательно будет стоять id или class, можно использовать любой атрибут, который есть в теге.

ПРИМЕР 2. Нужно собрать информацию с тега, который НЕ содержит атрибут.

data1data2

Нужно собрать data2 с тегов td, которые не содержат class. Справиться с этой задачей нам поможет оператор not:

//table//td[not(@class)]

он выберет все td, у которых нет атрибута class

или

//table//td[not(@class, "title")]

Данный Xpath используется если есть необходимость привязаться к конкретному классу.

ПРИМЕР 3. Чтобы получить определенный элемент из списка, нужно к xpath добавить номер элемента.

  • значение 1
  • значение 2
  • значение 3

Если нужно собрать второй li, Xpath будет следующим:

//ul/li[2]

Если нужен последний элемент, то Xpath будет таким:

//ul/li[last()]

ПРИМЕР 4. На сайтах очень часто можно встретить Javascript пагинацию. В данном случае Datacol позволяет собирать данные с помощью сценария. Но не всегда есть ссылка на следующую страницу. Часто присутствует только список страниц: “1 2 3 4 5 6 7 8 9 10 …”. Как в таком случае нажать на следующую?

Пример такого сайта: fedresurs.ru

Суть решения состоит в определении текущего элемента и выборе следующего. Для этого применяем конструкцию:

//li[@class="active"]/following-sibling::li[1]/a

Мы берем текущий активный элемент, в нашем случае у него class=active. Далее идет оператор following-sibling. Данный оператор выбирает теги, которые идут за текущим. li[1]/a указывает на то, что это должен быть следующий (первый) тег li с вложенным тегом a.

ПРИМЕР 5. Нужно получить тег, у которого есть определенный атрибут, к примеру атрибут target:

Тип1

Значение1
Значение2

В данном случае нужно использовать следующий xpath:

//a/@target

Вы соберете ссылку на Значение1.

ПРИМЕР 6. Иногда попадаются сайты, у которых одни и те же данные представлены в разном виде. Например, у одного товара обычная цена, у другого акционная, которая в коде страницы прописана по другому. В данном случае в настройках поля просто укажите несколько xpath выражений, каждое с новой строки. Если Datacol не найдет первое, то перейдет ко второму, а затем перейдет к regex.

Материал для статьи был предоставлен сайтом bestweb4u.net, на котором можно найти много познавательных материалов по тонкостям настройки Datacol.