如何用漂亮的汤刮掉谷歌搜索的第一个链接

Posted

技术标签:

【中文标题】如何用漂亮的汤刮掉谷歌搜索的第一个链接【英文标题】:How can I scrape the first link of a google search with beautiful soup 【发布时间】:2016-01-30 09:04:38 【问题描述】:

我正在尝试制作一个脚本,该脚本将抓取 google 搜索的第一个链接,以便它只返回第一个链接,以便我可以在终端中运行搜索并稍后查看链接搜索词。我正在努力只得到第一个结果。这是迄今为止我得到的最接近的东西。

import requests
from bs4 import BeautifulSoup

research_later = "hiya"
goog_search = "https://www.google.co.uk/search?sclient=psy-ab&client=ubuntu&hs=k5b&channel=fs&biw=1366&bih=648&noj=1&q=" + research_later


r = requests.get(goog_search)    
soup = BeautifulSoup(r.text)  

for link in soup.find_all('a'):
    print research_later + " :"+link.get('href')

【问题讨论】:

为什么 google 搜索 URL 这么长,有这么多不同的参数? (我只是好奇) 【参考方案1】:

好像谷歌使用cite标签来保存链接,所以我们可以像这样使用soup.find('cite').text

import requests
from bs4 import BeautifulSoup

research_later = "hiya"
goog_search = "https://www.google.co.uk/search?sclient=psy-ab&client=ubuntu&hs=k5b&channel=fs&biw=1366&bih=648&noj=1&q=" + research_later


r = requests.get(goog_search)

soup = BeautifulSoup(r.text, "html.parser")
print soup.find('cite').text

输出是:

www.urbandictionary.com/define.php?term=hiya

【讨论】:

现在不行了..为什么?它返回错误,例如'''print (soup.find('cite').text) AttributeError: 'NoneType' object has no attribute 'text''''【参考方案2】:

您可以使用select_one() 选择CSS 选择器或find() bs4 方法从页面中仅获取一个元素。要获取 CSS 选择器,您可以使用 SelectorGadget 扩展。

代码和example in the online IDE:

from bs4 import BeautifulSoup
import requests, json

headers = 
    'User-agent':
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"


html = requests.get('https://www.google.com/search?q=ice cream', headers=headers).text
soup = BeautifulSoup(html, 'lxml')

# locating .tF2Cxc class
# calling for <a> tag and then calling for 'href' attribute
link = soup.select('.yuRUbf a')['href']
print(link)

# https://en.wikipedia.org/wiki/Ice_cream

或者,您可以使用来自 SerpApi 的 Google Search Engine Results API 来做同样的事情。这是一个带有免费计划的付费 API。

主要区别在于所有内容(选择、绕过块、代理轮换等)都已为最终用户完成并提供 JSON 输出。

要集成的代码:

params = 
    "engine": "google",
    "q": "ice cream",
    "api_key": os.getenv("API_KEY"),


search = GoogleSearch(params)
results = search.get_dict()

# [0] - first index from the search results
link = results['organic_results'][0]['link']
print(link)

# https://en.wikipedia.org/wiki/Ice_cream

免责声明,我为 SerpApi 工作。

【讨论】:

以上是关于如何用漂亮的汤刮掉谷歌搜索的第一个链接的主要内容,如果未能解决你的问题,请参考以下文章

如何用python和漂亮的汤从html代码中提取一个小时

如何用经纬度查地点?

如何用谷歌寻找潜在外贸客户

利用Python解决掉谷歌人机验证,全自动识别真的牛啊

如何使用美丽的汤来刮掉SEC的Edgar数据库并接收欲望数据

从python中的列表中获得完全匹配