import lxml.html as LH
content = '''\
<div id="all-stories" class="book">
<ul>
<li title="Book1" ><a href="book1_url">Book1</a></li>
<li title="Book2" ><a href="book2_url">Book2</a></li>
</ul>
</div>
'''
root = LH.fromstring(content)
for atag in root.xpath('//div[@id="all-stories"]//li/a'):
print(atag.attrib['href'], atag.text_content())
урожаи
('book1_url', 'Book1')
('book2_url', 'Book2')
XPath //div[@id="all-stories"]/div
ничего не соответствует, потому что нет ни одного ребенка div
внутри наружный div
бирка.
XPath //div[@id="all-stories"]/li
также не будет соответствовать, потому что нет прямого ребенок li
Тагя внутри div
тега. Тем не менее, //div[@id="all-stories"]//li
делает соответствует li
тегам, потому что //
сообщает XPath рекурсивно искать настолько глубоко, насколько необходимо, чтобы найти теги li
.
Теперь ваш контент не указан в теге li
. Он находится внутри тега a
. Вместо этого используйте XPath '//div[@id="all-stories"]//li/a'
, чтобы достичь тегов a
. Доступ к атрибуту href
можно получить с помощью atag.attrib['href']
, а текст - atag.text_content()
.
Не хотите '// div [@ id =" all-stories "]/ul/li/text()'? – kgraney
@kgraney Я пробовал подход, но не получил результат. –