Поиск по блогу

воскресенье, 28 декабря 2014 г.

Ссылки по теме "XPath MDN Mozilla" и "Introduction to using XPath in JavaScript MDN"

Здесь десяток ссылок от 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


Scratchpad MDN
HTML to DOM
JavaScript MDN

Это результат подбора параметров в плагине XPath Helper

Атрибуты здесь используются для фильтрации (во всей строчке), а в конце для вывода значений атрибута.

In []:
#
//div[@class='catalog']/div[@class='catalog-firm'][6]/div[@class='tile-pin-list tile-pin-list_catalog']/a/@href
In []:
# четыре строчки
/catalog/daewoo/
/catalog/hyundai/
/catalog/kia/
/catalog/ssangyong/

Теперь пробуем получить те же результаты в консоли, тут вывод довольно странный

In []:
$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/​"
]
In []:
//a[@class='specified_string']/@href 
In []:
$('a[href^="mailto:"]').addClass('mailClass'); 
$('a[href$=".pdf"]').addClass('pdfClass');
$('a[href*="hyundai"]').addClass('mySiteClass');
In []:
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):
In []:
 
In []:
//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)"



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий