2010-03-02 39 views
9

計劃是這樣的:併發下載 - Python

我下載了一個網頁,收集了在DOM中解析的圖像列表,然後下載這些圖像。在此之後,我會遍歷圖像以評估哪個圖像最適合表示網頁。

問題是圖像是一個一個下載的,這可能需要一段時間。


這將是巨大的,如果有人能在關於該主題的一些方向指向我。

幫助將非常感激。

回答

4

Here是一篇關於使用url抓取的線程的文章。

6

雖然線程肯定是一種可能性,但我會建議asyncore - 有一個很好的示例here,它顯示了同時獲取兩個URL(易於推廣到任何URL列表!)。

14

加速爬取基本上是Eventlet的主要用例。速度非常快 - 我們有一個應用程序需要幾分鐘才能達到200萬個URL。它利用了系統上最快速的事件接口(通常是epoll),並且使用greenthread(它是建立在協程之上並且非常便宜),以便於編寫。

這裏的an example from the docs

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。我發誓,在這個問題被問到之前,它正在進行中,但這個問題終於激勵我完成它。 :)]

+0

第二個鏈接不再起作用。 – 2017-10-17 11:47:26