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

时间:2015-10-30 01:29:12

标签: python beautifulsoup python-requests

我试图制作一个脚本,它会刮掉谷歌搜索的第一个链接,这样它就会只返回第一个链接,这样我就可以在终端中运行搜索并稍后查看链接与搜索词。我努力只获得第一个结果。这是我到目前为止最接近的事情。

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')

2 个答案:

答案 0 :(得分:10)

似乎Google使用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

答案 1 :(得分:1)

您可以使用 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 div element with a tF2Cxc class
# calling for <a> tag and then calling for 'href' attribute
link = soup.find('div', class_='tF2Cxc').a['href']
print(link)

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

或者,您可以使用来自 SerpApi 的 Google Search Engine Results API 来做同样的事情。这是一个付费 API,可免费试用 5,000 次搜索。

主要区别在于,所有内容(选择、绕过块、代理轮换等)都已通过 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)

# output:
'''
https://en.wikipedia.org/wiki/Ice_cream
'''
<块引用>

免责声明,我为 SerpApi 工作。