计划是这样的:
我下载一个网页,收集在DOM中解析的图像列表,然后下载这些图像.在此之后,我将遍历图像,以评估哪个图像最适合代表网页.
问题是图像是逐个下载的,这可能需要相当长的时间.
如果有人能指出我关于这个话题的某个方向,那将是很棒的.
非常感谢帮助.
加速爬行基本上是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寻求帮助.
[更新:我在文档中添加了一个更复杂的递归网络爬虫示例.我发誓这是在提出这个问题之前的工作,但这个问题最终激励我完成它.:)]
虽然线程肯定是可能的,但我建议asyncore
- 这里有一个很好的例子,它显示了两个URL的同时提取(很容易推广到任何URL列表!).