Python调用requests/urllib访问雅虎财经返回404但直接点击链接正常
问题原因
- 雅虎财经对请求做了反爬虫校验,会校验请求头的
User-Agent字段,默认情况下Python的requests、urllib库发送的请求会携带包含Python标识的UA,会被服务器识别为爬虫请求,直接返回404错误。 - 部分区域访问雅虎财经还需要附带首次访问生成的合规校验cookie,无cookie的裸请求也会被拦截。
解决方案
核心是给请求添加模拟正常浏览器的请求头,首选添加User-Agent字段即可解决绝大多数情况,若仍报错可额外补充浏览器中复制的对应页面的Cookie参数。
requests库修复示例
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } a = requests.get('https://finance.yahoo.com/quote/AAPL/financials?p=AAPL', headers=headers) a.raise_for_status() # 打印前100个字符验证返回正常 print(a.text[:100])
urllib库修复示例
import urllib.request headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } req = urllib.request.Request("https://finance.yahoo.com/quote/AAPL/financials?p=AAPL", headers=headers) data = urllib.request.urlopen(req).read() print(data[:100])
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

