我想在一个站点批量下载网页。我的'urls.txt'文件中有500万个网址链接。大约300M。如何让多线程链接这些网址并下载这些网页?或如何批量下载这些网页?Python,多线程,获取网页,下载网页
我的想法:
with open('urls.txt','r') as f:
for el in f:
##fetch these urls
或扭曲?
有没有很好的解决方案呢?
我想在一个站点批量下载网页。我的'urls.txt'文件中有500万个网址链接。大约300M。如何让多线程链接这些网址并下载这些网页?或如何批量下载这些网页?Python,多线程,获取网页,下载网页
我的想法:
with open('urls.txt','r') as f:
for el in f:
##fetch these urls
或扭曲?
有没有很好的解决方案呢?
一次下载5M网页绝对不是一个好主意,因为你会最大限度地减少很多事情,包括网络带宽和操作系统的文件描述符。我会分批进行100-1000次。你可以使用urllib.urlopen来获取套接字,然后在几个线程上读取()。您可能可以使用select.select。如果是这样,那么请立即下载全部1000个文件,并将每个选择返回的文件句柄分配给10个工作线程。如果select不起作用,那么将您的批次限制为100次下载,并且每次下载使用一个线程。当然你不应该启动超过100个线程,因为你的操作系统可能会爆炸或至少会有点慢。
如果这不是一个更大的程序的一部分,那么notnoop的使用一些现有的工具来完成这个想法是一个很好的。如果一个调用wget的shell循环解决了你的问题,那么比任何涉及更多定制软件开发的东西都要容易得多。但是,如果您需要将这些资源作为较大程序的一部分获取,那么使用shell执行操作可能并不理想。在这种情况下,我强烈建议Twisted,这可以使并行执行多个请求变得容易。
几年前,我写了一个如何做到这一点的例子。看看http://jcalderone.livejournal.com/24285.html。
谢谢:)太棒了! – bell007
一个wget的脚本可能是最简单的,但如果你正在寻找一个蟒蛇绞爬行的解决方案,看看scrapy
你想自己动手编程?你可以用'wget'轻松做到这一点。 – notnoop