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

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

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

<h1 class"product_123">Текст</h1>

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

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

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

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

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

<table class="table">
<tr>
<td class="title">data1</td.
<td>data2</td>
</tr>
</table>

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

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

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

или

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

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

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

<ul>
<li>значение 1</li>
<li>значение 2</li>
<li>значение 3</li>
</ul>

Если нужно собрать второй 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:

<div>
<div class="name">Тип1</div>
<span><a target="_blank" href="/link1.html">Значение1</a></span>
<span><a href="/link2.html">Значение2</a></span>
</div>

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

//a/@target

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

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

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