Основы работы со сбором данных в 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:
В данном случае нужно использовать следующий xpath:
//a/@target
Вы соберете ссылку на Значение1.
ПРИМЕР 6. Иногда попадаются сайты, у которых одни и те же данные представлены в разном виде. Например, у одного товара обычная цена, у другого акционная, которая в коде страницы прописана по другому. В данном случае в настройках поля просто укажите несколько xpath выражений, каждое с новой строки. Если Datacol не найдет первое, то перейдет ко второму, а затем перейдет к regex.
Материал для статьи был предоставлен сайтом bestweb4u.net, на котором можно найти много познавательных материалов по тонкостям настройки Datacol.