如何使用Python从网站下载多个CSV文件?
我是一名编程初学者(金融专业人士)&我希望使用Python减少手工工作。我想从以下站点下载多个CSV(过去一年的每日波动CSV) 到目前为止,我可以一次下载一个文件。但我无法申请loop下载过去一年的CSV。另外,如果我可以跳过周六和周日的CSV下载,这也会有所帮助 我制作了一个csv文件,其中提到了所有必需的csv文件的链接。然后尝试导入该csv文件并对其运行for循环操作。但我对编程了解不够,无法做到这一点如何使用Python从网站下载多个CSV文件?,python,csv,Python,Csv,我是一名编程初学者(金融专业人士)&我希望使用Python减少手工工作。我想从以下站点下载多个CSV(过去一年的每日波动CSV) 到目前为止,我可以一次下载一个文件。但我无法申请loop下载过去一年的CSV。另外,如果我可以跳过周六和周日的CSV下载,这也会有所帮助 我制作了一个csv文件,其中提到了所有必需的csv文件的链接。然后尝试导入该csv文件并对其运行for循环操作。但我对编程了解不够,无法做到这一点 导入请求 进口舒蒂尔 r=请求。获取('https://nseindia.com/a
导入请求
进口舒蒂尔
r=请求。获取('https://nseindia.com/archives/nsccl/volt/CMVOLT_01072018.CSV,stream=True)
如果r.status_code==200:
以open(“01072018.csv”,“wb”)作为f:
r、 raw.decode_content=True
shutil.copyfileobj(r.raw,f)
所需结果:根据日期范围输入下载CSV文件。实际结果:一次下载1个CSV文件。我会为您的脚本添加一个日期循环:
filenames=['https://nseindia.com/archives/nsccl/volt/CMVOLT_01072018.CSV',
'https://nseindia.com/archives/nsccl/volt/CMVOLT_01082018.CSV',
'https://nseindia.com/archives/nsccl/volt/CMVOLT_01092018.CSV',
]
for x in filenames:
r=requests.get(x, stream=True)
if r.status_code == 200:
with open(x.split('_')[-1], 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
#!/usr/bin/env ipython
# --------------------
import requests
import shutil
import datetime
# -----------------------------------------------------------------------------------
dates=[datetime.datetime(2019,1,1)+datetime.timedelta(dval) for dval in range(0,366)];
# -----------------------------------------------------------------------------------
for dateval in dates:
r = requests.get('https://www.nseindia.com/archives/nsccl/volt/CMVOLT_'+dateval.strftime('%d%m%Y')+'.CSV', stream=True)
if r.status_code == 200:
with open(dateval.strftime('%d%m%Y')+".csv", 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
# ---------------------------------------------------------------------------------
好的,在不添加另一个库的情况下,下面的代码应该可以工作,尽管它在我的机器上不工作,但有一些限制
import datetime as timer
import requests
import shutil
def download_data(date):
url='https://nseindia.com/archives/nsccl/volt/CMVOLT_'+date+'.CSV'
csv_filename=date+'.csv'
try:
print('Calling url:- ' + url)
r = requests.get(url, stream=True,verify=False)
if r.status_code == 200:
with open(csv_filename, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
r.close()
except Exception as e:
print('for Date '+ date +' Exception happened, most probably a weekend, EXCEPTION Message is ' + str(e))
def code_runner():
i=0
now = timer.datetime.now()
day = now.day
month = now.month
year = now.year
while i<365:
day=day-1
if day==0:
day=31
month=month-1
if month==0:
month=12
year=year-1
year1=year
month1='{:02d}'.format(month)
day1='{:02d}'.format(day)
date=str(day1)+str(month1)+str(year1)
download_data(date)
i+=1
if __name__=='__main__':
code_runner()
将日期时间导入为计时器
导入请求
进口舒蒂尔
def下载_数据(日期):
url='1〕https://nseindia.com/archives/nsccl/volt/CMVOLT_“+日期+”.CSV”
csv_filename=日期+'.csv'
尝试:
打印('调用url:-'+url)
r=requests.get(url,stream=True,verify=False)
如果r.status_code==200:
打开(csv_文件名,“wb”)作为f:
r、 raw.decode_content=True
shutil.copyfileobj(r.raw,f)
r、 关闭()
例外情况除外,如e:
打印('Date'+Date+'发生异常,很可能是一个周末,异常消息为'+str(e))
def代码_runner():
i=0
now=timer.datetime.now()
day=now.day
月份=现在。月份
年=现在
我被“预期结果”搞糊涂了。这段代码不包含循环,所以您怎么能期望它下载多个文件呢?你是说想要的结果吗?我删除了那部分代码,因为它不起作用。我提到这一点是为了让大家了解我的思维过程。是的,这应该是我想要的结果。这正是我想要的!谢谢。我一直收到异常:异常消息是HTTPSConnectionPool(host='nseindia.com',port=443):url:/archives/nsccl/volt/CMVOLT_22072019.CSV超过最大重试次数(由NewConnectionError引起)(':未能建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应',)),我认为这是因为我的计算机处于受限环境中。