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也不会匹配,因为标签内没有直接子标签。但是,确实匹配标签,因为它告诉 XPath 以递归方式搜索尽可能多的深度以找到标签。lidiv//div[@id="all-stories"]//li li//li
现在,您要查找的内容不在li标签中。它在a标签内。所以改为使用 XPath
'//div[@id="all-stories"]//li/a'来访问a标签。href可以使用 访问属性的值,使用 访问atag.attrib['href']文本atag.text_content()。