【发布时间】:2021-06-28 17:38:55
【问题描述】:
我想从 DuckDuckGo 搜索结果中抓取第一个链接。我写了下面的代码:
import requests
from bs4 import BeautifulSoup
class Bse:
def currentPrice(self,symbol):
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:84.0) Gecko/20100101 Firefox/84.0"
}
duckDuckUrl=f'https://duckduckgo.com/?q=bse+{symbol}+stock+price'
response=requests.get(duckDuckUrl,headers=headers)
soup=BeautifulSoup(response.text,"html.parser")
bseIndiaLink=soup.find_all('a')
# bseIndiaLink=soup.find_all('a',class_="result__a") #giving empty list
print(bseIndiaLink)
bse=Bse()
bse.currentPrice('reliance')
首先我在 beautifulSoup 中使用了 find_all() ,没有使用 class_ 参数。它返回给我一些对我没有任何用处的随机锚标记列表。 我还尝试了带有 class_ 参数的 find_all(),但它返回了一个空列表。
我试图打印汤对象。它打印的是网页的 HTML,但不是那些包含 div 的结果。我不知道为什么 BeautifulSoup 没有抓取包含 div 的结果。请看截图,突出显示的 HTML 语法是我要抓取的:
我找到了一个答案,即 DuckDuckGo 使用 javascript 作为搜索结果,而 beautifulSoup 无法抓取 javascript,但在 StackOverflow 上的其他帖子中,我发现人们能够从它的结果中抓取链接。
但是,如果我使用 Google 而不是 DuckDuckGo,我可以抓取所需的链接。
我想知道为什么我不能从 DuckDuckGo 中抓取,而是使用相同的代码从 Google 抓取。我很好奇。
如果有人知道我忽略或遗漏了什么,请告诉我。这将有助于我的学习之旅。
谢谢
【问题讨论】:
-
@artanik itls 向我显示此错误:- requests.exceptions.MissingSchema:无效的 URL 'html.duckduckgo.com/html/?q=nse%20depend%20stock%20price':未提供架构。也许你的意思是html.duckduckgo.com/html/?q=nse%20reliance%20stock%20price?
标签: python html web-scraping beautifulsoup