scrapy 新增快取中介軟體 減少網路重複請求

2021-08-22 13:12:04 字數 1567 閱讀 9777

目前公司做的爬蟲,不管測試還是爬取都是從網路直接請求資源,在除錯的時候個人感覺十分耗時間,效率太低。最近受到同事的啟發,做乙個本地快取來提高速度。

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 就查詢出來...