Andrej Kesely 的回答将引发错误,因为此 css 类不再存在:
gotolink = parser.find('div', class_='r').a["href"]
AttributeError: 'NoneType' object has no attribute 'a'
详细了解user-agent 和request headers。
基本上user-agent 让我们识别浏览器、它的版本号和它的主机操作系统,在 Web 上下文中代表一个人(浏览器),让服务器和网络对等方识别它是否是机器人与否。
在这种情况下,您需要发送一个虚假的 user-agent,以便 Google 将您的请求视为“真实”用户访问 also known as user-agent spoofing。
在请求headers 中传递user-agent:
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"
}
requests.get(YOUR_URL, headers=headers)
代码和example in the online IDE:
from bs4 import BeautifulSoup
import requests
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"
}
params = {
"q": "selena gomez"
}
html = requests.get('https://www.google.com/search', headers=headers, params=params)
soup = BeautifulSoup(html.text, 'lxml')
link = result.select_one('.yuRUbf a')['href']
print(link)
# https://www.instagram.com/selenagomez/
或者,您可以使用来自 SerpApi 的 Google Organic Results API 来实现相同的目的。这是一个带有免费计划的付费 API。
本质上,您的情况的主要区别在于,您无需考虑如何绕过 Google 块(如果它们出现)或弄清楚如何抓取更难抓取的元素,因为它已经完成了-用户。唯一需要做的就是从 JSON 字符串中获取你想要的数据。
示例代码:
import os
from serpapi import GoogleSearch
params = {
"engine": "google",
"q": "selena gomez",
"api_key": os.getenv("API_KEY"),
}
search = GoogleSearch(params)
results = search.get_dict()
# [0] means index of the first organic result
link = results['organic_results'][0]['link']
print(link)
# https://www.instagram.com/selenagomez/
免责声明,我为 SerpApi 工作。