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