我对使用Python抓取还很陌生。 我正在尝试从Exilead上的查询中获取搜索结果的数量。在此example中,我想获得“ 586,564个结果”。
这是我正在运行的代码:
r = requests.get(URL, headers=headers)
tree = html.fromstring(r.text)
stats = tree.xpath('//[@id="searchform"]/div/div/small/text()')
这将返回一个空列表。
我直接从元素页面复制粘贴了xPath。
作为替代,我尝试使用美丽汤:
html = r.text
soup = BeautifulSoup(html, 'xml')
stats = soup.find('small', {'class': 'pull-right'}).text
返回属性错误:NoneType对象没有属性文本。
当我检查html源代码时,我意识到实际上在源代码上找不到我要查找的元素(结果数)。
有人知道为什么会这样吗?如何解决? 非常感谢!
答案 0 :(得分:2)
当我检查html源代码时,我意识到实际上在源代码上找不到我要查找的元素(结果数)。
这表明您要查找的数据是使用javascript动态生成的。您需要能够在html源代码中看到所需的元素。
要确认这是导致错误的原因,您可以尝试以下非常简单的方法:
html = r.text
soup = BeautifulSoup(html, 'lxml')
*请注意上面的“ lxml”。
然后手动检查“汤”以查看所需元素是否存在。
答案 1 :(得分:1)
我可以使用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)