8

我有一个这样的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>

我想使用 xpath 获取书籍及其各自的 url,但似乎我的方法不起作用。为简单起见,我尝试提取“li”标签下的所有元素,如下所示

lis = tree.xpath('//div[@id="all-stories"]/div/text()')
4

1 回答 1

9
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()

于 2013-06-29T13:58:51.940 回答