Я написал скрипт для загрузки файлов PDF из Википедии.Я реализовал цикл для просмотра всех URL-адресов, которые я хочу загрузить (у меня они есть в файле .csv).Первые несколько файлов загружаются довольно быстро (неудивительно, что они имеют размер около 200 КБ), но через некоторое время загрузка занимает все больше и больше времени.Это похоже на некоторый экспоненциальный рост в моем цикле, который делает цикл намного медленнее после каждой итерации.Может быть, запрос не был закрыт правильно или что-то, я действительно не знаю.
Может кто-нибудь помочь мне сделать этот код менее плохим и более эффективным?urls
и titles
оба являются списками.Они передаются из одной и той же функции, поэтому я мог бы просто преобразовать их в словарь.
def getPDF(urls, titles, path):
i = 0
for i in range(len(urls) - 1):
i += 1
with open(path + '/{}.pdf'.format(titles[i]), 'wb') as f:
with requests.session() as s:
r = s.get(urls[i])
f.write(r.content)
print('{}.pdf'.format(titles[i]) + ' downloaded!')
РЕДАКТИРОВАТЬ: он должен иметь отношение к запросу.Я добавил функцию, которая выводит время загрузки (с первой строки в getPDF()
до строки print()
. Вот результаты:
Downloads werden gestartet, das Programm beendet automatisch...
Wirtschaft.pdf downloaded! (2.606057643890381sec)
Wirtschaftseinheit.pdf downloaded! (1.41001296043396sec)
Planung.pdf downloaded! (1.6632893085479736sec)
Bedürfnis#In den Wirtschaftswissenschaften.pdf downloaded! (1.4947214126586914sec)
Unternehmen.pdf downloaded! (2.317748546600342sec)
Privathaushalt.pdf downloaded! (122.32739114761353sec)
%C3%96ffentlicher Haushalt.pdf downloaded! (2.03417706489563sec)
Absatzwirtschaft.pdf downloaded! (0.8923726081848145sec)
Produktion.pdf downloaded! (0.2800614833831787sec)
Tausch.pdf downloaded! (1.5359272956848145sec)
Konsum.pdf downloaded! (121.9487988948822sec)
Entsorgungswirtschaft.pdf downloaded! (121.20771074295044sec)
Gut (Wirtschaftswissenschaft).pdf downloaded! (245.15847492218018sec)
Fertig!
Примечание: я поместил это в код такон отформатирован, я надеюсь, что все в порядке.
Совершенно очевидно, что вы получаете что-то вроде «удара» после 4 запросов, а затем нужно подождать 2 минуты, в конце вы сразу же получили инсульт и даже должны былиподождите 4 минуты для следующих запросов. Это будет означать, что вопрос связан не с «загрузкой больших файлов», а с вопросом «как загрузить множество очень маленьких файлов?».
Наверное, вопрос сейчасдолжно быть: Кто-нибудь знает, сколько задержки нужно добавить, чтобы исправить это? И согласны ли вы со мной, что «задержка» должна быть вызвана отправкой слишком большого количества запросов за слишком короткое время?