PythonLXML-选择不带双斜杠的xpath

PythonLXML-选择不带双斜杠的xpath,python,xpath,lxml,Python,Xpath,Lxml,但是,在python中尝试使用lxml.html是行不通的: import requests import lxml.html s = requests.session() page= s.get('http://lxml.de/') html = lxml.html.fromstring(page.text) p=html.xpath('p') 这里p是一个空列表 我需要使用p=html.xpath('//p') 有人知道为什么吗?页面可能不包含(即根),而是包含xpath表达式的 使用双斜

但是,在python中尝试使用lxml.html是行不通的:

import requests
import lxml.html
s = requests.session()
page= s.get('http://lxml.de/')
html = lxml.html.fromstring(page.text)
p=html.xpath('p')
这里
p
是一个空列表

我需要使用
p=html.xpath('//p')


有人知道为什么吗?

页面可能不包含
(即根),而是包含xpath表达式的

使用双斜杠,
//p
,检索所有
元素,或者向下走,绝对引用特定的
。下面用第一段内容演示:

p = html.xpath('/html/body/div/p')

print(p[0].text)
# lxml is the most feature-rich
# and easy-to-use library
# for processing XML and HTML
# in the Python language.
相当于:

p = html.xpath('//p')

print(p[0].text)    
# lxml is the most feature-rich
# and easy-to-use library
# for processing XML and HTML
# in the Python language.
解析
时不使用前向斜杠,这需要以前的xpath和搜索路径斜杠:

div = p = html.xpath('/html/body/div')[0]    
p = div.xpath('p')

print(p[0].text)
# lxml is the most feature-rich
# and easy-to-use library
# for processing XML and HTML
# in the Python language.

谢谢您的回复:我知道如何检索目标数据,我的问题中也提到了这一点。我只是想在一开始就去掉双斜杠,让表达式更整洁。请看一下我在问题中提供的xpath文档的链接:它清楚地表明,如果没有双斜杠,表达式将“选择名为“nodename”的所有节点”。没有提到,如果没有斜杠,检索到的元素位于根。事实上,这就是单斜杠的行为。不是一个可靠的网站。我从未见过这样一个XPath表达式,它只命名一个节点名,所有节点都返回。需要某种类型的斜杠。可能这句话的意思是在某个上下文中,这是有意义的。但是,要访问该上下文,您需要一个带有
/
的搜索路径。w3schools不是“文档”。这是一个教程网站,由第三方制作,与W3C没有连接。有些人觉得它有帮助,有些人则没有。在我看来,它通常是一个很好的快速查找你已经忘记的小细节的工具,但它在解释你一开始就不知道的概念方面相当薄弱。w3schools上的这一特定页面试图解释路径表达式,而没有提到“上下文”或“焦点”,对于理解绝对路径表达式(以“/”开头)和相对路径表达式(通常以元素名称开头)之间的语义差异而言,绝对必要的概念