Adr*_*oli 5 python python-3.x python-requests selenium-webdriver
我试图在 Google 上的一个简单查询中获得第一个非广告结果。
res = requests.get('https://www.google.com?q=' + query)
Run Code Online (Sandbox Code Playgroud)
为查询分配任何值,您将收到错误消息。我试图添加一些标题,但没有任何变化。
我试图添加谷歌通常与查询相关联的所有其他参数,但没有任何变化。
如果您使用硒进行搜索,则没有问题。
错误代码是 429,但这似乎只是此查询的标准响应。它与我的 IP 无关,我也没有向 Google 发送垃圾邮件,而且这不会在一段时间后消失。
您知道为什么会发生这种情况吗,是否有我可以添加的标题或任何其他解决方案来查看结果,就像您在 google 上搜索该关键字一样?
由于您收到status code 429这意味着您在给定的时间内发送了太多请求(“速率限制”)。在此处阅读更多详细信息。
像这样在您的请求中添加标题:
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)\
AppleWebKit/537.36 (KHTML, like Gecko) Cafari/537.36'}
Run Code Online (Sandbox Code Playgroud)
所以最终的请求将是:
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)\
AppleWebKit/537.36 (KHTML, like Gecko) Cafari/537.36'}
Run Code Online (Sandbox Code Playgroud)
HTTP 429 Too Many Requests响应状态代码表示用户在给定时间内发送了太多请求(“速率限制”)。响应表示应该包括解释条件的详细信息,并且可以包括Retry-After指示在发出新请求之前等待多长时间的标头。
当服务器受到攻击或刚刚收到来自一方的大量请求时,用429状态代码响应每个请求将消耗资源。因此,服务器不需要使用429状态码;当限制资源使用时,仅删除连接或采取其他步骤可能更合适。
然而,当我拿你的代码并执行相同的测试时,我得到了完美的结果,如下所示:
代码块:
import requests
query = "selenium"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
url = 'https://www.google.com/search?q=' + query
res = requests.get(url, headers=headers)
print(res)
Run Code Online (Sandbox Code Playgroud)
控制台输出:
<Response [200]>
Run Code Online (Sandbox Code Playgroud)
您可以在无法加载资源:服务器通过 Selenium 使用 ChromeDriver Chrome 响应状态为 429(请求过多)和 404(未找到)中找到相关讨论