我写了一个脚本从维基百科下载PDF文件。 我实现了一个循环来遍历所有要下载的url(我将它们保存在一个.csv文件中)。最初的几个文件下载得相当快(难怪,它们的大小只有200kB),但过了一段时间,下载需要的时间越来越长。 感觉我的循环有指数级的增长,这使得每次迭代后我的循环速度慢了很多。 可能是请求没有按正确的方式关闭或者什么的,我真的不知道。你知道吗
有人能帮我把这个代码做得不那么糟糕,更有效吗?
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分钟等待下一次请求。 这意味着这个问题与“下载大文件”无关,而与“如何下载大量非常小的文件”有关。你知道吗
我想现在的问题应该是:有人知道为了解决这个问题,你需要增加多少延迟吗? 你同意我说的“延迟”一定是因为在太短的时间内发送了太多的请求吗?你知道吗
如果你遇到一个大的pdf文件,评论中的建议是很好的。如果使用scrapy异步下载,即使文件较小,也可以获得更快的结果
至于代码美学,你可以把每个单独的责任交给一个单独的功能,例如:
您的主要辅助功能可以是:
和主回路控制回路:
希望有帮助。你知道吗
相关问题 更多 >
编程相关推荐