当前位置:  开发笔记 > 编程语言 > 正文

并发下载 - Python

如何解决《并发下载-Python》经验,为你挑选了2个好方法。

计划是这样的:

我下载一个网页,收集在DOM中解析的图像列表,然后下载这些图像.在此之后,我将遍历图像,以评估哪个图像最适合代表网页.

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


如果有人能指出我关于这个话题的某个方向,那将是很棒的.

非常感谢帮助.



1> rdw..:

加速爬行基本上是Eventlet的主要用例.它的速度非常快 - 我们的应用程序必须在几分钟内达到2,000,000个网址.它利用系统上最快的事件接口(通常是epoll),并使用greenthreads(它们建立在协同程序之上并且非常便宜)以便于编写.

以下是文档中的示例:

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)

这是开发功能更全面的爬虫的一个很好的起点.随意进入Freenode的#eventlet寻求帮助.

[更新:我在文档中添加了一个更复杂的递归网络爬虫示例.我发誓这是在提出这个问题之前的工作,但这个问题最终激励我完成它.:)]



2> Alex Martell..:

虽然线程肯定是可能的,但我建议asyncore- 这里有一个很好的例子,它显示了两个URL的同时提取(很容易推广到任何URL列表!).

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有