Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用xpath获取div标记内的列表项_Python_Xpath_Lxml - Fatal编程技术网

Python 使用xpath获取div标记内的列表项

Python 使用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

我有一个像这样的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
//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')