使用Python requests下载NSE股票数据陷入无限循环如何解决
问题排查与解决方法
核心原因
NSE官网对API请求设置了反爬校验,直接用requests发起请求时,缺少浏览器的特征请求头、cookies信息,服务器不会返回正常数据,甚至会触发无限重定向或者无响应,再加上原代码未设置超时、未限制重定向次数,就会出现程序卡住的情况。
排查步骤
- 先打印请求的响应状态码和响应头,确认是否出现3xx重定向、4xx/5xx错误:在
requests.get之后加一行print(r.status_code, r.headers),先判断返回的状态是否为200,是否存在location字段说明需要重定向 - 禁用默认的自动重定向,排查重定向逻辑:给
requests.get加参数allow_redirects=False,如果返回302/307状态码,说明请求被跳转,默认requests无限制允许重定向就会陷入循环 - 对比浏览器发起该API请求的请求头:打开浏览器F12开发者工具,切换到网络标签,找到对应API请求,复制User-Agent、Referer、Accept等请求头,加到requests的请求参数里
修复后的代码示例
import requests from requests.exceptions import HTTPError, TooManyRedirects # 屏蔽verify=False带来的SSL警告 requests.packages.urllib3.disable_warnings() def download_url(url, save_path, chunk_size=1024): # 模拟浏览器的请求头,User-Agent需要替换为你自己浏览器的实际值 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", "Referer": "https://www.nseindia.com/market-data/live-equity-market?symbol=NIFTY%2050", "Accept": "text/csv,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3" } # 配置会话,设置最大重定向次数为5次,避免无限循环 session = requests.Session() session.max_redirects = 5 try: # 加15秒超时参数,无响应就抛出异常避免卡住 r = session.get(url, stream=True, verify=False, headers=headers, timeout=15, allow_redirects=True) r.raise_for_status() except TooManyRedirects: print("重定向次数超过上限,请检查请求头是否正确") return except HTTPError as http_err: print(f'访问URL出现HTTP错误: {http_err}') return except Exception as err: print(f'访问URL出现其他错误: {err}') return else: with open(save_path, 'wb') as fd: for chunk in r.iter_content(chunk_size=chunk_size): # 过滤keep-alive产生的空chunk if chunk: fd.write(chunk) # 调用示例 if __name__ == "__main__": target_url = "https://www.nseindia.com/api/equity-stockIndices?csv=true&index=SECURITIES%20IN%20F%26O" save_path = "./nse_fno_securities.csv" download_url(target_url, save_path)
补充说明
如果修改请求头后依然请求失败,可以先通过session请求一次NSE官网主页拿到合法cookies,再发起API请求,部分反爬规则会校验cookies的来源合法性。
内容的提问来源于stack exchange,提问作者kiran Mane
相关产品推荐
相关产品推荐

