Python 使用xpath获取div标记内的列表项
我有一个像这样的htmlPython 使用xpath获取div标记内的列表项,python,xpath,lxml,Python,Xpath,Lxml,我有一个像这样的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&g
<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
//div[@id=“all stories”]/div
不匹配,因为外部div
标记中没有子div
XPath//div[@id=“all stories”]/li
也不匹配,因为div
标记中没有直接的子级li
tage。但是,//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()
Don't you want//div[@id=“all stories”]/ul/li/text()
?@kgraney我尝试了这种方法,但没有得到结果。我的html有这样一部分:- 172
- 68
。我的代码是这样写的:在tree.xpath('//ul[@id=“ABC”]//li'):
print li.text\u contet()
但没有打印任何内容。除了拼写错误(text\u contet
-->text\u content
),您的代码看起来很好。这是您的代码的可运行版本,打印172和68:。
lis = tree.xpath('//div[@id="all-stories"]/div/text()')
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')