[英]Problems with Speed during web-crawling (Python)
我希望這個程序可以大大提高速度。 它在10分鍾內讀取+-12000頁。 我想知道是否有什么對速度有很大幫助? 我希望你們知道一些技巧。 我應該閱讀+-數百萬頁...,這將花費太長時間:(這是我的代碼:
from eventlet.green import urllib2
import httplib
import time
import eventlet
# Create the URLS in groups of 400 (+- max for eventlet)
def web_CreateURLS():
print str(str(time.asctime( time.localtime(time.time()) )).split(" ")[3])
for var_indexURLS in xrange(0, 2000000, 400):
var_URLS = []
for var_indexCRAWL in xrange(var_indexURLS, var_indexURLS+400):
var_URLS.append("http://www.nu.nl")
web_ScanURLS(var_URLS)
# Return the HTML Source per URL
def web_ReturnHTML(url):
try:
return [urllib2.urlopen(url[0]).read(), url[1]]
except urllib2.URLError:
time.sleep(10)
print "UrlError"
web_ReturnHTML(url)
# Analyse the HTML Source
def web_ScanURLS(var_URLS):
pool = eventlet.GreenPool()
try:
for var_HTML in pool.imap(web_ReturnHTML, var_URLS):
# do something etc..
except TypeError: pass
web_CreateURLS()
我喜歡使用greenlets ..,但是我經常受益於使用分布在許多系統上的多個進程。或者僅使用一個系統就可以讓OS負責運行多個進程的所有檢查和平衡。
在http://zeromq.org/上查看ZeroMQ,以獲取有關如何使TON的偵聽器完成調度程序所說的任何事情的良好示例。 另外,請簽出execnet,以獲取一種快速開始並行執行遠程或本地任務的方法。
我也經常使用http://spread.org/,並且有很多系統在監聽公用的傳播守護程序。.這是非常有用的消息總線,可以將結果匯總到一個線程並從一個線程分派。
然后當然總會有redis pub / sub或sync。 :)
“分擔負擔”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.