【发布时间】:2010-03-02 01:14:57
【问题描述】:
计划是这样的:
我下载一个网页,收集在 DOM 中解析的图像列表,然后下载这些图像。在此之后,我将遍历图像以评估哪个图像最适合代表网页。
问题是图像是一张一张地下载的,这可能需要相当长的时间。
如果有人能就该主题向我指出一些方向,那就太好了。
非常感谢您的帮助。
【问题讨论】:
标签: python html concurrency web-crawler
计划是这样的:
我下载一个网页,收集在 DOM 中解析的图像列表,然后下载这些图像。在此之后,我将遍历图像以评估哪个图像最适合代表网页。
问题是图像是一张一张地下载的,这可能需要相当长的时间。
如果有人能就该主题向我指出一些方向,那就太好了。
非常感谢您的帮助。
【问题讨论】:
标签: python html concurrency web-crawler
加速爬取基本上是Eventlet的主要用例。它非常快——我们有一个应用程序必须在几分钟内访问 2,000,000 个 url。它利用系统上最快的事件接口(通常是 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 寻求帮助。
[更新:我在文档中添加了更复杂的 recursive web crawler example。我发誓在提出这个问题之前它已经在进行中,但这个问题最终确实激励我完成它。 :)]
【讨论】:
Here 是一篇关于线程的文章,它以 url fetching 为例。
【讨论】: