Herunterladen vieler Dateien mit Python

Gibt es eine gute Möglichkeit, mit Python massenweise viele Dateien herunterzuladen? Dieser Code ist schnell genug, um etwa 100 Dateien herunterzuladen. Aber ich muss 300.000 Dateien herunterladen. Offensichtlich sind sie alle sehr kleine Dateien (oder ich würde nicht 300.000 von ihnen herunterladen :)), so dass der wahre Engpass diese Schleife zu sein scheint. Hat jemand irgendwelche Gedanken? Vielleicht mit MPI oder Threading?

Muss ich nur mit dem Flaschenhals leben? Oder gibt es einen schnelleren Weg, vielleicht nicht einmal mit Python?

(Der Vollständigkeit halber habe ich den gesamten Code-Anfang eingefügt.)

from __future__ import division
import pandas as pd
import numpy as np
import urllib2
import os
import linecache 

#we start with a huge file of urls

data= pd.read_csv("edgar.csv")
datatemp2=data[data['form'].str.contains("14A")]
datatemp3=data[data['form'].str.contains("14C")]

#data2 is the cut-down file

data2=datatemp2.append(datatemp3)
flist=np.array(data2['filename'])
print len(flist)
print flist

###below we have a script to download all of the files in the data2 database
###here you will need to create a new directory named edgar14A14C in your CWD

original=os.getcwd().copy()
os.chdir(str(os.getcwd())+str('/edgar14A14C'))


for i in xrange(len(flist)):
    url = "ftp://ftp.sec.gov/"+str(flist[i])
    file_name = str(url.split('/')[-1])
    u = urllib2.urlopen(url)
    f = open(file_name, 'wb')
    f.write(u.read())
    f.close()
    print i

Antworten auf die Frage(1)

Ihre Antwort auf die Frage