Здесь десяток ссылок от Mozilla Development Network. Эти записи я сделал, когда пытался выбрать инструментарий для парсинга html-страниц. Потом я догадался разделить все мои задачи на две категории. Первая - настройка селекторов для спайдеров (Scrapy). Вторая - ручной (экспрес)парсинг из одной-двух html-страниц, когда надо быстро, а паука писать не хочется. ТОгда можно открыть консоль и по-быстрому вырезать нужные элементы. И все работает, только одна проблема вырисовывается - чтобы вытащить нужные данные из объектов консоли нужны довольно сложнве команды. К таким выводам я пришел после беглого знакомства с мануалами от MDN И Явускрипт победил простой плагин XPath helper.
Страница cars.mail.ru/catalog - для настроек парсинга
XPath MDN Mozilla
Веб Консоль MDN
Introduction to using XPath in JavaScript MDN Returns an XPathResult based on an XPath expression and other given parameters
Debugging JavaScript
Using XPath MDN
Это результат подбора параметров в плагине XPath Helper¶
Атрибуты здесь используются для фильтрации (во всей строчке), а в конце для вывода значений атрибута.
#
//div[@class='catalog']/div[@class='catalog-firm'][6]/div[@class='tile-pin-list tile-pin-list_catalog']/a/@href
# четыре строчки
/catalog/daewoo/
/catalog/hyundai/
/catalog/kia/
/catalog/ssangyong/
Теперь пробуем получить те же результаты в консоли, тут вывод довольно странный
$x("//div[@class='catalog']/div[@class='catalog-firm'][6]/div[@class='tile-pin-list tile-pin-list_catalog']/a/@href")
[
href="/catalog/daewoo/"
,
href="/catalog/hyundai/"
,
href="/catalog/kia/"
,
href="/catalog/ssangyong/"
]
//a[@class='specified_string']/@href
$('a[href^="mailto:"]').addClass('mailClass');
$('a[href$=".pdf"]').addClass('pdfClass');
$('a[href*="hyundai"]').addClass('mySiteClass');
In XPath 2.0, you can use the function directly in the text():
//div/p/substring-after(text(), ' ')
In XPath 1.0, that cannot be achieved with only one expression because:
the substring-after() function takes a string as first parameter, not a node-set
a function cannot be specified as a location step (as the 2.0 example above does).
So, in 1.0, your best bet is something like (which you'd have to repeat for each node - notice also it returns just a string):
//a[@class='specified_string']/@href
#As the class attribute may contain multiple class names separated by spaces, you probably actually want:
//a[contains(concat(' ',normalize-space(@class),' '), 'some_class_name')]/@href
xmllint sample.xml --xpath "string(//a[text()='some value']/@href)"
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий