我想从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_u参数查找_all(),但它返回了一个空列表
我试图打印汤对象。它打印的是网页的HTML,而不是那些包含div的结果。我不知道为什么BeautifulSoup不删除包含div的结果。请看屏幕截图,突出显示的HTML语法是我想要的:
我发现DuckDuckGo在搜索结果中使用javascript,而beautifulSoup无法获取javascript,但在StackOverflow的其他帖子中,我发现人们可以从搜索结果中获取链接。
但是如果我使用谷歌而不是DuckDuckGo,我就能够获得所需的链接
我想知道为什么我不能从DuckDuckGo上抓取,而是使用相同的代码从Google上抓取。我很好奇
如果有人知道我遗漏了什么,请告诉我。这将有助于我的学习之旅
多谢各位
这是正确的行为,因为您要求
bs4
获取所有<a>
标记,并且它返回了找到的所有<a>
标记您可以更改URL以获取非JavaScript版本:
如果每次只需要先提取链接,则可以执行以下操作:
代码和full example in the online IDE:
或者,您可以使用SerpApi中的DuckDuckGo Organic Results API。这是一个免费的付费API。查看playground
不同之处在于它刮去了DuckDuckGo的JavaScript版本,唯一需要做的就是迭代JSON字符串并提取所需内容
要集成的代码:
这将根据您当前的搜索关键字生成结果。您需要发送post http请求以及适当的参数来访问内容。为了使您当前的尝试成功,我在有效负载中使用了一些字符串格式
使用get请求:
相关问题 更多 >
编程相关推荐