Приклади селекторів (CSS, XPath) для парсингу даних із сайтів інтернет-магазинів
Приклади селекторів (CSS, XPath) для отримання даних на сторінках інтернет-магазинів (парсинг сайтів).
Отримуємо артикул виробника зі списку значень (теги ul li)
Селектор CSS:
ul. desc-list li:nth-child(7)::text()
або XPATH для Артикул:
//ul[li/text() = "Артикул"]/span[2]/text()
Отримуємо артикул виробника з таблиці атрибутів товару (фільтр за назвою атрибуту товару)
Селектор XPath: //tr[td/text() = "Артикул"]/td[2]/text()
Отримуємо ціну на товар (на підставі id елемента, що змінюється на кожній сторінці з товаром)
Селектор XPath з пошуком слова "retail_price": //span[contains(@id,"retail_price")]
Отримуємо список посилань на інші сторінки товарів (пагінація), крім поточної сторінки (оскільки посилання на товари по ній вже отримані)
Селектор CSS: ul. pagination li:not(. active) a
CSS локатори:
div#pocks — шукаємо див, у якого айдішник дорівнює pocks
div. perl - шукаємо див, у якого клас називається perl
body[vlink=1] - шукаємо тег боді, у якого атрибут vlink=1
body[vlink*=1] — шукаємо тег боді, у якого атрибут vlink містить одиничку
body[vlink€=1] — шукаємо тег боді, у якого атрибут vlink закінчується на одиницю
body[vlink^=1] — шукаємо тег боді, у якого атрибут vlink починається на одиничку
Пробіл знаходить все нащадків у елемента. Приклад:
div#ires a — знаходить усі посилання у дива з айдішником ires
div#ires a:nth-of-type(1) — знаходить усі посилання у дива з айдішником ires перші
div >a - всі дива, у яких відразу за ними є нащадок
div+div - знаходить див який йде відразу за першим дивом
div+a — всі дива, за якими відразу йдуть a елементи (посилання)
div ~ div - пропускає елемент за елементом
a:contains("ggdgdgd") - знаходить а
*. warning - будь-який елемент із класом warning
div * p - шукаємо елемент p у якого є предок div і між ними можуть бути елементи
h1. opener+h2 — шукаємо елемент h2 сусід перед яким елемент h1 має клас opener
a[rel~="copyring"] — шукаємо посилання з атрибутом rel, у якого всередині є клас із значенням copyring
span[hello='Cleveland'][goodbye='Columbus'] — шукає елемент span, у якого є атрибут hello зі значенням Cleveland та атрибут goodbye зі значенням Columbus
div. flyout > a — Знайти усі посилання, які знаходяться відразу після div елемента з класом flyout
div#action_list_body_current li:nth-of-type(1) — Знайти друге завдання у списку current
#quick search a[accesskey ="p"] — Знайти другу картинку з атрибутом accesskey "p" у quick search
#context_list a:contains('line') — знайти контекст у таблиці Contexts, який містить текст "line"
XPath локатори:
/body/. . - батько баді, тобіш тег html
У чому відмінність xpath від css, в ікспас ми можемо ходити знизу вгору, а в цсс тільки зверху вниз. //
//a[text()='some value'] — знайти посилання з текстом some value
author[last-name [position()=1]= "Bob"] — знайти елемент author у якого є елемент last-name і у last-name це перша позиція
//div[@id='header'] — елемент див з айді хедер
//div[1] - перший див
//div[position()=1] - однаково що //div[1]
//div[2 and 3] - другий і третій див
У xpath відношення елементів визначають осі
// - означає що шукаємо по всіх вкладених елементах
/descendant:div[@id='header'] - знаходить всіх нащадків діва з айді хеадер
book/*/last-name - знаходимо елемент бук після якого йде будь-який елемент а за ним відразу йде елемент ластнейм
*[@specialty] – будь-який елемент з атрибутом specialty
author[first-name][3] — елемент з назвою author, у якого є нащадок елемент first-name і він третій
author[not(degree or award) and publication] — знаходимо елемент author, у якого немає нащадка елемента degree або award, але є елемент publication
ancestor::author[parent::book][1] — знаходимо предка, у якого є назва елемента author і у якого є непордсенний батько book і вибираємо першу позицію
//a[text() ="Preferences"][ancestor::*[@id='header']] — знайти посилання Preferences у верхньому меню (йдемо зверху вниз, спочатку пишемо посилання з текстом Preferences
//*[@id ='action_list_curent']//span[@class='next_action_name'][following-sibling::*/a[contains(@href,'contexts') and text() ='Offline'] ] — Знайти усі завдання у списку current з контекстом Offline
Набуття значення з style
substring-before(substring-after(//div[@class="Header"]/div[@class="Header-jpeg"]/@style, "background-image: url("), ")")
Реєстр. вираз
\€\(". prod-img"\). css\("backgroundImage", "url\((. *?)\)
для отримання посилання на картинку з тексту
€(". prod-img"). css("backgroundImage", "url(https://site.com/img/014/114288.jpg)");
Посилання:
w3.org/TR/selectors/
w3schools.com/css/css_examples. asp
Парсинг сайту загальний опис.
Моніторинг цін конкурентів в інтернеті