概述
每當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變數,其中每乙個元素就是乙個中介軟體 ...