网页爬取时Pandas无法解析NSE India的TIMESTAMP问题求助
解决NSE期权链API中Timestamp字段提取问题
问题根源
你不需要把整个JSON响应转换成Pandas DataFrame来提取timestamp——因为response['records']本身是一个字典,timestamp是这个字典里的单个字符串值,用DataFrame处理反而会绕弯路。
正确提取方法
方法1:直接从JSON字典提取(推荐)
跳过将整个响应转成DataFrame的步骤,直接从返回的JSON数据中取值:
url = 'https://www.nseindia.com/api/option-chain-indices?symbol=NIFTY' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.5', 'Accept':'application/json' } session = requests.Session() request = session.get(url, headers=headers) cookies = dict(request.cookies) response = session.get(url, headers=headers, cookies=cookies).json() # 直接提取timestamp update_time = response['records']['timestamp'] print(update_time)
方法2:如果你已经将响应转成了DataFrame
如果坚持要保留rawdata = pd.DataFrame(response)这一步,那么需要先取出records列对应的字典,再提取timestamp:
# 基于你已有的rawdata变量 records_dict = rawdata['records'].iloc[0] # 取出records列的第一个(也是唯一一个)字典元素 update_time = records_dict['timestamp'] print(update_time)
之前尝试失败的原因
- 尝试1:
pd.DataFrame(rawdata['records']['timestamp'])错误。rawdata['records']是Pandas Series,不是字典,无法直接用['timestamp']取值;而且即使拿到timestamp字符串,单个字符串不能直接构造DataFrame,因此抛出ValueError。 - 尝试2:
pd.DataFrame(rawdata['records']).get(['timestamp'])错误。rawdata['records']是单个字典,转成DataFrame后,timestamp是其中一列,但get(['timestamp'])的用法不对,且如果DataFrame构造时结构不符合预期,会返回None。 - 尝试3:因尝试2的逻辑错误,找不到对应列,所以触发默认返回值。
内容的提问来源于stack exchange,提问作者srt111
相关产品推荐
相关产品推荐

