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