Python + XPath: возможно ли выбрать следующий элемент после того, который я на самом деле хочу? - PullRequest
2 голосов
/ 19 сентября 2011

Предположим, у меня есть что-то вроде этого:

<span class="filesize">File<a href="http://example.com/image.jpg" 
target="_blank">image.jpg</a>-(1.61 MB, 1000x1542, <span title="what the file is actually 
called.jpg">what the file is actually called.jpg</span>)</span><br><a href="http://example.com
/image.jpg" target="_blank">

Я хочу извлечь из него http://example.com/image.jpg и what the file is actually called.jpg. Постоянный термин - <span class="filesize">File, который я могу найти, используя xpath("span[text()='File']"), но это только дает мне доступ к span. Есть ли способ сделать что-то вроде result += 1, чтобы потом перейти по ссылке, а затем span с именем файла?

1 Ответ

2 голосов
/ 19 сентября 2011

Вы можете использовать "оси" following-sibling и preceding-sibling xpath для навигации, которая вам нужна.Вы можете получить задержанные здесь .

РЕДАКТИРОВАТЬ:

Вот пример, который дает мне результат, который вы хотите использовать только xpath.Однако это может не сработать для вас, в зависимости от того, на что похож окружающий XML: (Мне также пришлось завершить некоторые из тегов, чтобы они были «настоящим» XML. Возможно, вы сможете заставить его работать без этого, поместив свой XMLпарсер в режиме HTML ...)

import lxml.etree

xml = lxml.etree.XML("""<something><span class="filesize">File<a href="http://example.com/image.jpg" target="_blank">image.jpg</a>-(1.61 MB, 1000x1542, <span title="what the file is actually called.jpg">what the file is actually called.jpg</span>)</span><br/><a href="http://example.com/image.jpg" target="_blank"></a></something>""",)

print xml.xpath("a[preceding-sibling::span/text()='File']/@href")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...