Scrapy詳解之中介軟體(Middleware)

2021-09-20 05:39:54 字數 2963 閱讀 1245

概述

每當scrapy進行乙個request請求時,這個方法被呼叫。通常它可以返回

1.none

2.response物件

3.request物件

4.丟擲ignorerequest物件

通常返回none較常見,它會繼續執行爬蟲下去。其他返回情況參考這裡

user-agent中介軟體

from faker import faker

class useragent_middleware():

def process_request(self, request, spider):

f = faker()

agent = f.firefox()

request.headers['user-agent'] = agent

**ip中介軟體

print('獲取訊**ip失敗!')

spider.logger.error('獲取訊**ip失敗!')

scrapy中對接selenium

options.add_argument('--headless') # 設定無介面

if chrome_path:

options.binary_location = chrome_path

if chrome_driver_path:

self.driver = webdriver.chrome(chrome_options=options, executable_path=chrome_driver_path) # 初始化chrome驅動

else:

self.driver = webdriver.chrome(chrome_options=options) # 初始化chrome驅動

def __del__(self):

self.driver.close()

def process_request(self, request, spider):

try:

print('chrome driver begin...')

self.driver.get(request.url) # 獲取網頁鏈結內容

return htmlresponse(url=request.url, body=self.driver.page_source, request=request, encoding='utf-8',

status=200) # 返回html資料

except timeoutexception:

return htmlresponse(url=request.url, request=request, encoding='utf-8', status=500)

finally:

print('chrome driver end...')

process_response(request, response, spider)

通常返回none,它會一直處理異常

@classmethod

def from_crawler(cls, crawler):

return cls(

mysql_host = crawler.settings.get('mysql_host'),

mysql_db = crawler.settings.get('mysql_db'),

mysql_user = crawler.settings.get('mysql_user'),

mysql_pw = crawler.settings.get('mysql_pw')

)

scrapy自帶中介軟體請參考這裡

spider中介軟體(spider middleware)

如文章第一張圖所示,spider中介軟體用於處理response及spider生成的item和request

啟動spider中介軟體必須先開啟settings中的設定

spider_middlewares =
數字越小越靠近引擎,process_spider_input()優先處理,數字越大越靠近spider,process_spider_output()優先處理,關閉用none

編寫自定義spider中介軟體

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...

Django之中介軟體

django中的中介軟體 middleware 在django中,中介軟體其實就是乙個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。在django專案的settings模組中,有乙個middleware classes變數,其中每乙個元素就是乙個中介軟體 ...