私は約500kの小さなcsvファイル(5kb-1mb)をURLリストからダウンロードしようとしていますが、これを行うには時間がかかりすぎています。コードにつきましては、1日に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