并发下载 - Python
计划是这样的:
我下载一个网页,收集网页中所有的图片,然后把这些图片下载下来。之后,我会逐一查看这些图片,以判断哪一张最适合用来代表这个网页。
问题是,图片是一个一个下载的,这样会花费不少时间。
如果有人能给我一些关于这个话题的建议,那就太好了。
非常感谢任何帮助。
4 个回答
4
这里有一篇关于线程的文章,里面用获取网址作为例子来讲解。
13
加快爬虫速度基本上就是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频道里问。
[更新:我在文档中添加了一个更复杂的递归爬虫示例。我发誓在这个问题提出之前就已经在准备这个示例了,但这个问题确实激励我把它完成。:)]