You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3爬取谷歌财经遇HTTP Error 403 Forbidden,如何更换IP?

解决谷歌财经历史数据爬取时IP被封禁的问题

嘿,我懂你现在的困扰——想用Python 3爬取谷歌财经的AMZN历史数据,不仅代码没写完,还碰到了IP被封禁的情况对吧?别慌,咱们一步步来拆解问题,找到可行的解决办法。

首先,先把你没写完的代码补全并修正基础问题,原代码里有拼写错误和未完成的调用,修正后的基础版本大概是这样:

import urllib.request
import ssl

url = 'http://finance.google.com/finance/historical?q=AMZN'
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
context = ssl._create_unverified_context()
req = urllib.request.Request(url, headers=headers)
try:
    html = urllib.request.urlopen(req, context=context).read()
    print(html[:500])  # 打印前500个字符验证请求结果
except urllib.error.HTTPError as e:
    print(f"请求错误: {e.code}")
except Exception as e:
    print(f"其他错误: {str(e)}")

不过就算补全了代码,你还是可能碰到IP封禁,这是因为谷歌财经有严格的反爬机制,单一IP频繁请求或者请求特征太像爬虫,都会被拦截。下面是几个实用的解决思路:

  • 优化请求头,模拟真实浏览器:除了User-Agent,你可以再加几个字段让请求更“真人化”,比如Referer(设置为谷歌首页)、Accept-Language(比如en-US,en;q=0.9),避免被识别为机器请求。
  • 添加请求延迟:每次请求后用time.sleep()停顿3-5秒,不要短时间内连续发起请求,降低被检测的概率。
  • 使用代理IP轮换:找一些可靠的代理IP池,每次请求随机切换代理,这样谷歌就不会盯着单一IP封禁了。注意要提前验证代理的可用性,避免用无效代理浪费时间。
  • 改用第三方库(最推荐):自己写爬虫要处理各种反爬太麻烦,不如用现成的库,比如yfinance——它原本针对雅虎财经,但也能获取类似的股票历史数据,而且封装了所有反爬逻辑,调用非常简单:
import yfinance as yf

# 获取AMZN的历史数据
amzn = yf.Ticker("AMZN")
# 可以指定时间范围,比如最近1年的每日数据
hist = amzn.history(period="1y")
# 打印数据前几行查看结果
print(hist.head())
  • 注意谷歌财经的端点变化:谷歌财经的历史数据页面URL可能已经更新,你可以先手动访问原URL看看是否还能正常打开,如果页面结构变了,原爬虫逻辑也得跟着调整。

最后提醒一下,就算用了上面的方法,也不要过度请求,遵守网站的robots.txt规则,避免给服务器造成太大压力哦。

内容的提问来源于stack exchange,提问作者econofutmist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:55