Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python从网站下载多个CSV文件?_Python_Csv - Fatal编程技术网

如何使用Python从网站下载多个CSV文件?

如何使用Python从网站下载多个CSV文件?,python,csv,Python,Csv,我是一名编程初学者(金融专业人士)&我希望使用Python减少手工工作。我想从以下站点下载多个CSV(过去一年的每日波动CSV) 到目前为止,我可以一次下载一个文件。但我无法申请loop下载过去一年的CSV。另外,如果我可以跳过周六和周日的CSV下载,这也会有所帮助 我制作了一个csv文件,其中提到了所有必需的csv文件的链接。然后尝试导入该csv文件并对其运行for循环操作。但我对编程了解不够,无法做到这一点 导入请求 进口舒蒂尔 r=请求。获取('https://nseindia.com/a

我是一名编程初学者(金融专业人士)&我希望使用Python减少手工工作。我想从以下站点下载多个CSV(过去一年的每日波动CSV)

到目前为止,我可以一次下载一个文件。但我无法申请loop下载过去一年的CSV。另外,如果我可以跳过周六和周日的CSV下载,这也会有所帮助

我制作了一个csv文件,其中提到了所有必需的csv文件的链接。然后尝试导入该csv文件并对其运行for循环操作。但我对编程了解不够,无法做到这一点

导入请求
进口舒蒂尔
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]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应',)),我认为这是因为我的计算机处于受限环境中。