Ich versuche 500k kleine csv-Dateien (5kb-1mb) aus einer Liste von URLs herunterladen, aber es dauert zu lange, um dies zu tun. Mit dem folgenden Code bin ich glücklich, wenn ich 10k Dateien pro Tag bekomme.Herunterladen von Tausenden von Dateien mit Python
Ich habe versucht, mit dem Multiprocessing-Paket und einem Pool mehrere Dateien gleichzeitig herunterladen. Dies scheint für die ersten paar tausend Downloads effektiv zu sein, aber schließlich sinkt die Gesamtgeschwindigkeit. Ich bin kein Experte, aber ich nehme an, dass die abnehmende Geschwindigkeit anzeigt, dass der Server, den ich herunterladen möchte, nicht mit dieser Anzahl von Anforderungen Schritt halten kann. Macht das Sinn?
Um ehrlich zu sein, bin ich ziemlich verloren hier und habe mich gefragt, ob es einen Ratschlag gibt, wie man das beschleunigen kann.
import urllib2
import pandas as pd
import csv
from multiprocessing import Pool
#import url file
df = pd.read_csv("url_list.csv")
#select only part of the total list to download
list=pd.Series(df[0:10000])
#define a job and set file name as the id string under urls
def job(url):
file_name = str("test/"+url[46:61])+".csv"
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
f.write(u.read())
f.close()
#run job
pool = Pool()
url = [ "http://" + str(file_path) for file_path in list]
pool.map(job, url)
können Sie alle URLs in eine Textdatei schreiben, dann verwenden Sie einen Download-Manager wie 'Aria2', um sie herunterzuladen :-) – aliva
danke für den Vorschlag, ich denke, es könnte gut funktionieren. Ich habe die Dokumentation von aria2 gelesen und kann die Namen der Dateien nicht finden. Weißt du, ob es möglich ist, die heruntergeladenen Dateien mit der URL (oder einem Teilstring davon) zu benennen? – tan
'aria2c -i file.txt' – aliva