получить элементы списка внутри тега div с помощью xpath
у меня есть html, как это
<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>
Я хочу получить книги и их соответствующий url с помощью xpath, но, похоже, мой подход не работает. для простоты я попытался извлечь все элементы под тегами " li " следующим образом
lis = tree.xpath('//div[@id="all-stories"]/div/text()')
1 ответов
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
tage внутри div
- тег. Однако,//div[@id="all-stories"]//li
тут матч li
теги, потому что //
говорит XPath рекурсивно искать так глубоко, как необходимо, чтобы найти li
метить.
теперь контент, который вы ищете, не находится в li
тег. Он находится внутри a
тег. Поэтому вместо этого используйте XPath
'//div[@id="all-stories"]//li/a'
до a
теги.
Значение можно atag.attrib['href']
текст с atag.text_content()
.