Niftyindices.com 无法抓取指数数据

问题描述 投票:0回答:1

我早些时候能够从 NSE India 的 Niftyindices.com 网站上抓取数据。这是我需要的历史指数数据。 网站是 www.niftyindices.com,历史数据可以在主页的历史数据下的报告部分找到。在此页面上,您需要选择指数类型为股票,并将指数选择为 NIFTY 100 数据范围可以是——我一般选择从2001年1月1日至今。 直到昨天,我才能从这个网站获取数据。但从今天早上开始,使用相同的代码突然没有数据出现。 以下是我用于抓取的代码。 bm_sv 是一个重要的 cookie,需要传递到网站 - 这是我以前的经验。 收到的Json已经没有任何数据了

感谢您提前提供帮助

import requests
import json
from datetime import datetime


print('start')

data=[]
headers = {'Content-Type': 'application/json; charset=utf-8'
           ,'Accept':'application/json, text/javascript, */*; q=0.01'
           ,'Accept-Encoding':'gzip, deflate'
           ,'Accept-Language':'en-US,en;q=0.9'
           ,'Content-Length':'100'
           ,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
           ,'Cookie':'bm_sv=9B706239B47F50CA0B651E20BA5CBF74~YAAQFjkgF2zWSiyOAQAAdV0dQRfVSICkZc20SfI+PnDk8taK1Ppu1ZSmjclFkHqVgsGOE0vK3WnPMHuhY5kOStjVm4OnN1wm9SBRO3nIAvXWAVCR8iN23B8R7kHpcme82M8ytCrJ/LozntCxQlQSFqzuFwLw4+ZPBjdkICfQH4piCmjvZB3AH8NvCmf+nbzT34Q4JO4zYeYadkjlKjVRVIh0lzX2BK8crljTE9W+F1DUdtZYBRBUCM83OIfmZhnH6PnDu79C~1'
           }

row=['indexname','date','open','high','low','close']
data.append(row)

payload={'name': 'NIFTY 100','startDate':'01-Jan-2001','endDate': '10-Mar-2024'}
JSonURL='https://www.niftyindices.com/Backpage.aspx/getHistoricaldatatabletoString'
r=requests.post(JSonURL, data=json.dumps(payload),headers=headers)
print(r.text)
text=r.json()
print(text)
datab=json.loads(text['d'])
sorted_data=sorted(datab,key=lambda x: datetime.strptime(x['HistoricalDate'], '%d %b %Y'), reverse=False)
print('startdata available from: ',datetime.strftime(datetime.strptime(sorted_data[0]['HistoricalDate'], '%d %b %Y'),'%d-%b-%Y'))
print('data available till',datetime.strftime(datetime.strptime(sorted_data[len(datab)-1]['HistoricalDate'], '%d %b %Y'),'%d-%b-%Y\n'))
for rec in sorted_data:
    row=[]
    row.append(rec['Index Name'])
    row.append(datetime.strptime(rec['HistoricalDate'], '%d %b %Y'))
    row.append(rec['OPEN'].replace('-','0'))
    row.append(rec['HIGH'].replace('-','0'))
    row.append(rec['LOW'].replace('-','0'))
    row.append(rec['CLOSE'])
    print(row)
    data.append(row)
        
print(data)
python post python-requests
1个回答
0
投票

您使用的有效负载必须是嵌套字典。请检查以下(修改后的)代码。现在可以了!

import requests
import json
from datetime import datetime


print('start')

data=[]
headers = {'Content-Type': 'application/json; charset=utf-8'
           ,'Accept':'application/json, text/javascript, */*; q=0.01'
           ,'Accept-Encoding':'gzip, deflate'
           ,'Accept-Language':'en-US,en;q=0.9'
           ,'Content-Length':'100'
           ,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
           ,'Cookie':'bm_sv=9B706239B47F50CA0B651E20BA5CBF74~YAAQFjkgF2zWSiyOAQAAdV0dQRfVSICkZc20SfI+PnDk8taK1Ppu1ZSmjclFkHqVgsGOE0vK3WnPMHuhY5kOStjVm4OnN1wm9SBRO3nIAvXWAVCR8iN23B8R7kHpcme82M8ytCrJ/LozntCxQlQSFqzuFwLw4+ZPBjdkICfQH4piCmjvZB3AH8NvCmf+nbzT34Q4JO4zYeYadkjlKjVRVIh0lzX2BK8crljTE9W+F1DUdtZYBRBUCM83OIfmZhnH6PnDu79C~1'
           }

row=['indexname','date','open','high','low','close']
data.append(row)

payload={'name': 'NIFTY 100','startDate':'01-Jan-2001','endDate': '10-Mar-2024'}
mypayload={"cinfo":json.dumps(payload)}
JSonURL='https://www.niftyindices.com/Backpage.aspx/getHistoricaldatatabletoString'
r=requests.post(JSonURL, data=json.dumps(mypayload),headers=headers)
print(r.text)
text=r.json()
print(text)
datab=json.loads(text['d'])
sorted_data=sorted(datab,key=lambda x: datetime.strptime(x['HistoricalDate'], '%d %b %Y'), reverse=False)
print('startdata available from: ',datetime.strftime(datetime.strptime(sorted_data[0]['HistoricalDate'], '%d %b %Y'),'%d-%b-%Y'))
print('data available till',datetime.strftime(datetime.strptime(sorted_data[len(datab)-1]['HistoricalDate'], '%d %b %Y'),'%d-%b-%Y\n'))
for rec in sorted_data:
    row=[]
    row.append(rec['Index Name'])
    row.append(datetime.strptime(rec['HistoricalDate'], '%d %b %Y'))
    row.append(rec['OPEN'].replace('-','0'))
    row.append(rec['HIGH'].replace('-','0'))
    row.append(rec['LOW'].replace('-','0'))
    row.append(rec['CLOSE'])
    print(row)
    data.append(row)
        
print(data)
© www.soinside.com 2019 - 2024. All rights reserved.