目前公司做的爬蟲,不管測試還是爬取都是從網路直接請求資源,在除錯的時候個人感覺十分耗時間,效率太低。最近受到同事的啟發,做乙個本地快取來提高速度。
print '從本地快取中取資料'
return res
except exception as e:
print 'middleware:' + str(e)
pass
@classmethod
def get_conn(cls):
return redis.redis(connection_pool=cls.conn_pool)
本地的快取用的是redis,速度快哈,用了乙個連線池,在程式啟動的時候cache_middleware就會被例項化,所以將連線池的初始化放在了類裡面,然後就是主要的函式process_request()這個函式,文件裡面對於middleware的介紹是這樣的
紅色框的部分就是主要的,如果返回了乙個response物件,它就不會去網路繼續請求,而是直接返回,這裡我就直接從redis中查詢資料,如果查詢到了資料,我就直接返回,這樣就減少了網路請求的時間
接下來就是要在settings裡面新增這個中介軟體
**********_middlewares =
最後就是在spider裡面新增儲存內容的**,跑第一遍的時候還是會向網路請求(本地沒有資料)
try:
c = cache_middleware.get_conn()
md = hashlib.md5()
x = original_url.encode('utf-8')
md.update(x)
key = md.hexdigest()
c.set(key, response.body)
except exception as e:
print e
pass
scrapy中介軟體
被呼叫時返回none 在建立專案時,在middlewares.py檔案中生成的爬蟲中介軟體,其中幾個函式如下 1 process spider input response,spider 當response傳給spider的解析函式前呼叫,返回none或異常 2 process spider out...
scrapy中介軟體
方法 process request self,request,spider 返回為none 繼續請求 返回為request物件,把request物件交給排程器,進行後續請求 返回為response物件,不再請求,response交給引擎然後給爬蟲 這個方法可以給request請求增加 ip,coo...
daisy framework 快取中介軟體
github 實際使用根據自己專案情況,比如常見的快取配置資料,首頁資料,排行榜資料等等。為什麼要用快取,用哪種快取中介軟體,這個應該也是我們在使用前要思考的,而不是追風。使用快取一般解決兩個問題,高效能和高併發。高效能 實在是太慢了。這個時候,可以根據業務情況,這些資料加到快取,2ms 就查詢出來...