我需要在Python中執行三步網頁抓取。我有幾個基本頁面,我最初颳了,我需要從這些頁面中選擇一些鏈接並檢索它們指向的頁面,然後再重複一次。訣竅是我想這樣做是異步的,這樣每個請求都會盡快被觸發,並且整個應用程序不會受到單個請求的阻止。我將如何做到這一點?Python中的多步驟併發HTTP請求
直到此時,我一直在做一步與eventlet
刮,就像這樣:
urls = ['http://example.com', '...']
def scrape_page(url):
"""Gets the data from the web page."""
body = eventlet.green.urllib2.urlopen(url).read()
# Do something with body
return data
pool = eventlet.GreenPool()
for data in pool.imap(screen_scrape, urls):
# Handle the data...
但是,如果擴展該技術,包括嵌套循環GreenPool.imap
,它阻止,直到所有的該組中的請求已完成,這意味着應用程序無法根據需要啓動更多請求。
我知道我可以用Twisted或其他異步服務器來做到這一點,但我不需要這麼龐大的庫,我寧願使用輕量級的東西。不過,我願意接受建議。
我真的建議看看扭曲;這是真的,這個庫很大,但你只需要使用它的http客戶端部分來做到這一點,並且嘗試了兩種類似的任務,高級庫方法就容易得多。 – 2012-07-16 03:44:28