python-xpath返回空列表-exilead



我对Python的抓取还很陌生。我正试图从Exilead上的查询中获得搜索结果的数量。在这个例子中,我想得到"586564个结果"。

这是我正在运行的代码:

r = requests.get(URL, headers=headers)
tree = html.fromstring(r.text)
stats = tree.xpath('//[@id="searchform"]/div/div/small/text()')

这将返回一个空列表。

我直接从元素的页面复制粘贴了xPath
作为一种选择,我尝试过使用Beautiful汤:

html = r.text
soup = BeautifulSoup(html, 'xml')
stats = soup.find('small', {'class': 'pull-right'}).text

返回Attribute错误:NoneType对象没有属性文本。

当我检查html源代码时,我意识到我实际上在源代码上找不到我要查找的元素(结果的数量(。

有人知道为什么会发生这种情况,以及如何解决这种情况吗?非常感谢!

当我检查html源代码时,我意识到我实际上在源代码上找不到我要查找的元素(结果的数量(。

这表明您要查找的数据是用javascript动态生成的。您需要能够在html源中看到您要查找的元素。

为了确认这是你错误的原因,你可以尝试一些非常简单的东西,比如:

html = r.text
soup = BeautifulSoup(html, 'lxml')

*请注意上面的"lxml"。

然后手动检查"汤",看看是否有你想要的元素。

我可以通过small.pull-right的css选择器组合来获得它,以标记和元素的类名为目标。

from bs4 import BeautifulSoup
import requests
url = 'https://www.exalead.com/search/web/results/?q=lead+poisoning'
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
print(soup.select_one('small.pull-right').text)

最新更新