我有一个像这样的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()')
答案 0 :(得分: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
也不匹配,因为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()
访问文本。