使用pd.read_csv加载NSE CSV URL失败,但浏览器可正常访问
解决pd.read_csv无法加载NSE存档CSV文件的问题
NSE(印度国家证券交易所)的存档服务器会校验请求的User-Agent字段:浏览器发起请求时会自动带上该字段标识自身,而pd.read_csv默认发起的请求无此标识,因此被服务器拒绝访问。以下是两种可行的解决方案:
方案1:使用requests库先获取内容
通过requests模拟浏览器请求头获取CSV内容,再传递给pandas解析:
import pandas as pd import requests from io import StringIO # 目标CSV链接 url = "https://nsearchives.nseindia.com/content/equities/sec_list_16072024.csv" # 模拟浏览器请求头(可根据自身浏览器调整) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" } # 发送请求并校验响应状态 response = requests.get(url, headers=headers) response.raise_for_status() # 解析CSV内容 stocks_circuit_limits = pd.read_csv(StringIO(response.text))
方案2:直接给pd.read_csv传入请求头
利用pd.read_csv的storage_options参数,直接传入请求头信息:
import pandas as pd url = "https://nsearchives.nseindia.com/content/equities/sec_list_16072024.csv" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" } # 通过storage_options传递请求头 stocks_circuit_limits = pd.read_csv(url, storage_options={"headers": headers})
注意事项
- 若后续仍出现访问问题,可尝试添加更多浏览器常见请求头(如
Accept、Accept-Language等); - User-Agent可从浏览器开发者工具中获取(F12 → 网络面板 → 任意请求的请求头),确保与真实浏览器一致。
内容的提问来源于stack exchange,提问作者Sachin Gupta
相关产品推荐
相关产品推荐

