并发下载-Python

并发下载-Python,python,html,concurrency,web-crawler,Python,Html,Concurrency,Web Crawler,计划如下: 我下载一个网页,收集在DOM中解析的图像列表,然后下载这些图像。在这之后,我将迭代通过图像,以评估哪个图像最适合表示网页 问题是图像是一个接一个地下载的,这可能需要相当长的时间 如果有人能就这个话题给我指出一些方向,那就太好了 非常感谢您的帮助。这是一篇关于线程的文章,它以url获取为例。虽然线程当然是一种可能性,但我建议您——有一个很好的例子正好显示了同时获取两个url(很容易推广到任何url列表!).加快爬行速度基本上是它的主要用例。它的速度非常快——我们有一个应用程序,它必须

计划如下:

我下载一个网页,收集在DOM中解析的图像列表,然后下载这些图像。在这之后,我将迭代通过图像,以评估哪个图像最适合表示网页

问题是图像是一个接一个地下载的,这可能需要相当长的时间


如果有人能就这个话题给我指出一些方向,那就太好了


非常感谢您的帮助。

这是一篇关于线程的文章,它以url获取为例。

虽然线程当然是一种可能性,但我建议您——有一个很好的例子正好显示了同时获取两个url(很容易推广到任何url列表!).

加快爬行速度基本上是它的主要用例。它的速度非常快——我们有一个应用程序,它必须在几分钟内达到2000000个URL。它利用了系统上最快的事件接口(通常是epoll),并使用绿色线程(构建在协同程序之上,非常便宜)使编写变得简单

这是:

这是开发功能更全面的爬虫程序的一个很好的起点。请随时访问Freenode上的#eventlet寻求帮助


[更新:我在文档中添加了一个更复杂的内容。我发誓在提出这个问题之前,它已经在工作中了,但这个问题最终激励我完成了它。:]

现在有一些优秀的Python库,你可能想使用,而且

urls = ["http://www.google.com/intl/en_ALL/images/logo.gif",
     "https://wiki.secondlife.com/w/images/secondlife.jpg",
     "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"]

import eventlet
from eventlet.green import urllib2  

def fetch(url):
  body = urllib2.urlopen(url).read()
  return url, body

pool = eventlet.GreenPool()
for url, body in pool.imap(fetch, urls):
  print "got body from", url, "of length", len(body)