09 scrapy的中介軟體
阿新 • • 發佈:2020-08-06
scrapy的中介軟體簡介
1 都寫在middlewares.py
2 爬蟲中介軟體
3 下載中介軟體
4 要生效,一定要配置,配置檔案
下載中介軟體:
下載中介軟體的用途 1、在process——request內,自定義下載,不用scrapy的下載 2、對請求進行二次加工,比如 設定請求頭 設定cookie 新增代理 scrapy自帶的代理元件: from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware from urllib.request import getproxies
下載中介軟體程式碼解析:
class DownMiddleware1(object): def process_request(self, request, spider): """ 請求需要被下載時,經過所有下載器中介軟體的process_request呼叫 :param request: :param spider: :return: None,繼續後續中介軟體去下載; Response物件,停止process_request的執行,開始執行process_response Request物件,停止中介軟體的執行,將Request重新排程器 raise IgnoreRequest異常,停止process_request的執行,開始執行process_exception """ pass def process_response(self, request, response, spider): """ spider處理完成,返回時呼叫 :param response: :param result: :param spider: :return: Response 物件:轉交給其他中介軟體process_response Request 物件:停止中介軟體,request會被重新排程下載 raise IgnoreRequest 異常:呼叫Request.errback """ print('response1') return response def process_exception(self, request, exception, spider): """ 當下載處理器(download handler)或 process_request() (下載中介軟體)丟擲異常 :param response: :param exception: :param spider: :return: None:繼續交給後續中介軟體處理異常; Response物件:停止後續process_exception方法 Request物件:停止中介軟體,request將會被重新呼叫下載 """ return None
中介軟體的簡單使用:
1 更換請求頭
from scrapy.http.headers import Headers
request.headers['User-Agent']=''
2 cookie池
request.cookies={'username':'asdfasdf'}
3 代理池
request.meta['download_timeout'] = 20
request.meta["proxy"] = 'http://27.188.62.3:8060'
以上都是再request中用的
4 selenium在scrapy中的使用
ps:selenium最好寫在response中
# 當前爬蟲用的selenium是同一個
# 1 在爬蟲中初始化webdriver物件
from selenium import webdriver
class CnblogSpider(scrapy.Spider):
name = 'cnblog'
...
bro=webdriver.Chrome(executable_path='../chromedriver.exe')
# 2 在中介軟體中使用(process_request)
spider.bro.get('https://dig.chouti.com/') response=HtmlResponse(url='https://dig.chouti.com/',body=spider.bro.page_source.encode('utf-8'),request=request)
return response
# 3 在爬蟲中關閉
def close(self, reason):
print("我結束了")
self.bro.close()