请求谷歌金融股票数据时遇urllib.error.HTTPError 403 Forbidden错误求修复
修复HTTP Error 403: Forbidden的问题
这个403错误是Google的反爬虫机制在起作用——它检测到你的请求不是来自真实浏览器,所以直接拒绝了访问。解决这个问题的核心就是伪装成浏览器发送请求,同时规范URL的处理方式。
修复后的代码
import re import urllib.request from urllib.parse import quote # 修正原URL的转义字符,HTML转义的&要替换为实际的& base_url = 'https://www.google.com/search?tbm=fin&ei=ULxUWpvZJoKE8wWWzLDgBw&q=' stock_name = input('Enter your stock name:') # 对股票名称做URL编码,避免特殊字符破坏URL格式 encoded_stock = quote(stock_name) full_url = base_url + encoded_stock # 构造请求头,模拟真实浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } req = urllib.request.Request(full_url, headers=headers) try: with urllib.request.urlopen(req) as response: data = response.read().decode('utf-8') print(data) except urllib.error.HTTPError as e: print(f"请求出错: {e}")
关键改动说明
- 修正URL格式:原URL里的
&是HTML转义字符,在Python代码里必须替换为实际的&,否则URL会被识别为无效。 - 添加浏览器身份标识:通过
User-Agent请求头告诉Google服务器,你的请求来自真实浏览器,绕过基础反爬拦截。你可以替换成自己当前使用浏览器的UA值。 - URL编码输入内容:用
urllib.parse.quote()处理股票名称,避免输入包含空格、特殊字符时导致URL解析错误。 - 增加异常捕获:用
try-except包裹请求逻辑,让代码遇到错误时能给出清晰提示,更健壮。
需要注意的是,Google的金融搜索反爬策略可能随时调整,长期稳定获取股票数据建议使用官方合规的金融API,但当前方案可以直接解决你遇到的403问题。
内容的提问来源于stack exchange,提问作者Web King
相关产品推荐
相关产品推荐

