Я пытаюсь загрузить около 500k небольших файлов csv (5kb-1mb) из списка URL-адресов, но для этого требуется слишком много времени. С приведенным ниже кодом мне повезло, если я получаю 10k файлов в день.Загрузка тысяч файлов с использованием python
Я попытался использовать пакет многопроцессорности и пул для загрузки нескольких файлов одновременно. Это кажется эффективным для первых нескольких тысяч загрузок, но в конечном итоге общая скорость снижается. Я не эксперт, но я предполагаю, что скорость снижения указывает на то, что сервер, который я пытаюсь загрузить, не может идти в ногу с этим количеством запросов. Это имеет смысл?
Если честно, я здесь совершенно потерялся и задавался вопросом, есть ли какой-нибудь совет относительно того, как ускорить это.
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)
вы можете написать все URL-адреса в текстовом файле, а затем использовать менеджер загрузки, например 'aria2', чтобы скачать их :-) – aliva
спасибо за предложение, я думаю, что это может сработать. Я читал документацию aria2 и не могу найти, как назвать файлы. Знаете ли вы, можно ли назвать загруженные файлы URL-адресом (или подстрокой)? – tan
'aria2c -i file.txt' – aliva