XPath 选择 HTML 会导致元素响应


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)

这一直给我:

[Element a at 0x1c64c963f48] 

响应而不是我在页面中寻找的实际数字? 知道为什么吗?
另外,为什么我无法获取type(link)值来查看类型?

尝试以下代码以获取"192,322"作为输出:

from lxml import html
import requests
url = 'https://www.data.gov/'
r = requests.get(url)
doc = html.fromstring(r.content)
try:
link = doc.xpath('//a[@href="/metrics"]/text()')[0]
print(link.split()[0])
except IndexError:
print("No link found")

XPath 为您提供<a>元素。你想要他们的文本。所以。。。打印其文本。

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

笔记

  • /html/body/header/div[4]/div/div/h4/label/small/a太具体。当他们对HTML布局进行最轻微的更改时,它很容易中断。不要使用自动生成的 XPath 表达式。自己编写所有 XPath 表达式。
  • XPath 始终返回节点列表,即使只有一个命中。使用循环或选取特定列表项(如link[0])。

您可以通过更改代码以使用text()来使用提取 href 的功能。见下文:

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)

Chrome 开发者工具中的示例:

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

最新更新