计划如下:
我下载一个网页,收集在DOM中解析的图像列表,然后下载这些图像。在此之后,我将迭代图像,以评估哪个图像最适合代表网页。
问题是图像是逐个下载的,这可能需要一段时间。
如果有人能指出我关于这个话题的某些方向,那就太棒了。
非常感谢帮助。
答案 0 :(得分: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寻求帮助。
[更新:我在文档中添加了更复杂的recursive web crawler example。我发誓这是在提出这个问题之前正在进行的工作,但这个问题最终激励我完成它。 :)]
答案 1 :(得分:6)
答案 2 :(得分:4)
Here是一篇关于使用url抓取作为示例的线程的文章。
答案 3 :(得分:0)