使用requests.get访问有效Yahoo Finance URL返回404错误的咨询
问题解决:requests.get访问雅虎财经AAPL分析页返回404
问题现象
- 直接访问
https://finance.yahoo.com/quote/AAPL/analysis?p=AAPL为有效链接,但使用requests.get请求时返回<Response [404]>,状态码404,r.ok为False,响应内容为空。 - 同域名下的
https://finance.yahoo.com/quote/AMG?p=AMG用相同方式请求,可正常返回200状态码,r.ok为True。
原因分析
雅虎财经针对不同页面设置了差异化反爬策略,AAPL分析页的反爬校验更严格。requests库默认请求头(尤其是User-Agent字段)会被服务器识别为非浏览器爬虫请求,从而返回404错误。
解决方案
在请求中添加模拟浏览器的请求头,让服务器判定请求来自合法浏览器,核心是设置User-Agent字段。
修改后的代码示例
import requests url = 'https://finance.yahoo.com/quote/AAPL/analysis?p=AAPL' # 模拟Chrome浏览器的User-Agent headers = { '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' } r = requests.get(url, headers=headers) print(r.status_code) # 预期返回200 print(r.ok) # 预期返回True
补充优化
如果仅添加User-Agent仍有问题,可补充更多浏览器常用请求头,进一步模拟真实请求:
headers = { '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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5' }
内容的提问来源于stack exchange,提问作者urbanscribe
相关产品推荐
相关产品推荐

