5 нояб. 2012 г.

Нюанс при построении xpath-запроса для использования lxml

С использованием замечательной библиотеки lxml, cбор данных с web-ресурсов превратился в сплошное удовольствие. Теперь можно обойтись без муторных регулярок и получать данные с DOM-дерева.

Кто хочет ознакомится с синтаксисом запросов Xpath - Welcome

А для особо ленивых подойдет Chrome(Chromium) Debugger. Который отдает точный и правильный путь, к нужным данным. К тому же он определяет классы и потому путь может сократится к:


//*[@id="class1"]/tbody/tr[5]


Большинство плагинов, по определению Xpath, выдают полный путь, без сокращений и вместо изящного решения получается:


/html/body/div/div/div/div[3]/div/div/div/div[10]/div/div/div/div[2]/table/tbody/tr/td/table/tbody/tr[5]

Но есть и нюанс, в том числе и примерах указанных выше. Зачастую данные хранятся в таблицах и браузеры, для подгонки к валидным стандартам в ответ могут добавлять тег tbody. Получается, что в путях, отданных плагином этот тег есть, но библиотека lxml не использует его при построении DOM-дерева.

Потому нужно проверять запрос на наличие tbody и убирать этот тег со строки. Для использования lxml, в первом примере нужно указать:

//*[@id="class1"]/tr[5]

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

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