我试图制作一个脚本,它会刮掉谷歌搜索的第一个链接,这样它就会只返回第一个链接,这样我就可以在终端中运行搜索并稍后查看链接与搜索词。我努力只获得第一个结果。这是我到目前为止最接近的事情。
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')
答案 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 扩展名。
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 工作。