Python html的xpath选择会导致元素响应

Python html的xpath选择会导致元素响应,python,xpath,lxml,Python,Xpath,Lxml,这一直让我感到: from lxml import html import requests url = 'https://www.data.gov/' r = requests.get(url) doc = html.fromstring(r.content) link = doc.xpath('/html/body/header/div[4]/div/div/h4/label/small/a') print(link) 响应,而不是我在页面中查找的实际数字?知道为什么吗? 另外,为什么我

这一直让我感到:

from lxml import html
import requests

url = 'https://www.data.gov/'
r = requests.get(url)
doc = html.fromstring(r.content)
link = doc.xpath('/html/body/header/div[4]/div/div/h4/label/small/a')
print(link)
响应,而不是我在页面中查找的实际数字?知道为什么吗?
另外,为什么我不能获取一个typelink值来查看类型?

您可以通过将代码更改为使用文本来使用该功能来提取href。见下文:

[Element a at 0x1c64c963f48] 
Chrome开发者工具中的示例:

from lxml import html
import requests

url = 'https://www.data.gov/'
r = requests.get(url)
doc = html.fromstring(r.content)
link = doc.xpath('/html/body/header/div[4]/div/div/h4/label/small/a/text()')
print(link)

通过将代码更改为使用文本,可以使用该功能提取href。见下文:

[Element a at 0x1c64c963f48] 
Chrome开发者工具中的示例:

from lxml import html
import requests

url = 'https://www.data.gov/'
r = requests.get(url)
doc = html.fromstring(r.content)
link = doc.xpath('/html/body/header/div[4]/div/div/h4/label/small/a/text()')
print(link)
XPath为您提供元素。你想要他们的文本。所以打印他们的文本

> $x("/html/body/header/div[4]/div/div/h4/label/small/a/text()")[0]
> 192,322 DATASETS 
注释

/html/body/header/div[4]/div/div/h4/label/small/a太具体了。当他们对HTML布局进行哪怕是最轻微的更改时,它也会很容易被破坏。不要使用自动生成的XPath表达式。自己编写所有XPath表达式。 XPath总是返回一个节点列表,即使只有一次命中。使用循环或拾取特定列表项,如链接[0]。 XPath为您提供元素。你想要他们的文本。所以打印他们的文本

> $x("/html/body/header/div[4]/div/div/h4/label/small/a/text()")[0]
> 192,322 DATASETS 
注释

/html/body/header/div[4]/div/div/h4/label/small/a太具体了。当他们对HTML布局进行哪怕是最轻微的更改时,它也会很容易被破坏。不要使用自动生成的XPath表达式。自己编写所有XPath表达式。 XPath总是返回一个节点列表,即使只有一次命中。使用循环或拾取特定列表项,如链接[0]。 尝试以下代码以获得192322作为输出:

link = doc.xpath("//label[@for='search-header']//a")

for a in link:
    print( a.text )
尝试以下代码以获得192322作为输出:

link = doc.xpath("//label[@for='search-header']//a")

for a in link:
    print( a.text )

Thx用于输入。这不会返回值192322或要解析的字符串,这正是我的目标。我正在复制/粘贴chrome inspect元素的xpath值,需要返回要在正则表达式中解析的值或字符串。为什么它会给我一个“元素”值响应?永远不要复制和粘贴机器生成的XPath。学习XPath。自己构建XPath表达式。对于新手来说,从csselect开始更安全吗?我试图学习所有可能的方法。@我同意托马兰克的观点,即您应该学习编写xpath。这就是说,如果您将@href更改为文本,则会起作用。现在用Chrome检查我的答案example@aland学习XPath到编写比任何机器都好的XPath所需的水平需要一个小时,很可能更少。想知道你是否想先做些别的事情是浪费时间。Thx输入。这不会返回值192322或要解析的字符串,这正是我的目标。我正在复制/粘贴chrome inspect元素的xpath值,需要返回要在正则表达式中解析的值或字符串。为什么它会给我一个“元素”值响应?永远不要复制和粘贴机器生成的XPath。学习XPath。自己构建XPath表达式。对于新手来说,从csselect开始更安全吗?我试图学习所有可能的方法。@我同意托马兰克的观点,即您应该学习编写xpath。这就是说,如果您将@href更改为文本,则会起作用。现在用Chrome检查我的答案example@aland学习XPath到编写比任何机器都好的XPath所需的水平需要一个小时,很可能更少。想知道你是否想先做些别的事情是浪费时间。谢谢你的意见。我应该说得更具体些。我试图得到一个字符串来解析或实际数字192322的网页。您的方法返回的是href/metrics。有什么想法吗?更新了answer.thx供您输入。我应该说得更具体些。我试图得到一个字符串来解析或实际数字192322的网页。您的方法返回的是href/metrics。有什么想法吗?更新的answer.doc.xpath'//a[@href=/metrics]/text'[0]将在未找到任何内容时产生运行时错误。我可能只使用if-link:空列表的计算结果为false,但任何检查都比不检查好。doc.xpath'//a[@href=/metrics]/text'[0]当没有找到任何内容时将产生运行时错误。我可能只使用if-link:空列表的计算结果为false,但任何检查都比不检查好。