scrapy提供的異常以及說明
DropItem
該異常由item pipeline拋出诲锹,用于停止處理item
CloseSpider
該異常由spider的回調(diào)函數(shù)(callback)拋出另玖,來暫停/停止spider。
參數(shù): reason (str) – 關(guān)閉的原因
def parse_page(self, response):
if 'Bandwidth exceeded' in response.body:
raise CloseSpider('bandwidth_exceeded')
DontCloseSpider
這個(gè)異常可以在spider_idle信號(hào)處理程序中引發(fā)铸豁,以防止爬行器被關(guān)閉慷荔。
IgnoreRequest
調(diào)度程序或任何下載器中間件都可以引發(fā)此異常汰寓,聲明忽略該request吆寨。
NotConfigured
某些組件可能會(huì)引發(fā)此異常,以指示它們將保持禁用狀態(tài)踩寇。這些組成部分包括:
Extensions
Item pipelines
Downloader middlwares
Spider middlewares
必須在組件的中引發(fā)異常 init 方法。
NotSupported
引發(fā)此異常以指示不支持的功能六水。
DOWNLOADMIDDLEWARE
process_request(request, spider)
當(dāng)每個(gè)request通過下載中間件時(shí)俺孙,該方法被調(diào)用。
process_request() 必須返回其中之一: 返回 None 掷贾、返回一個(gè) Response 對(duì)象睛榄、返回一個(gè) Request 對(duì)象或 raise IgnoreRequest 。
如果其返回 None想帅,Scrapy將繼續(xù)處理該 request场靴,執(zhí)行其他的中間件的相應(yīng)方法,直到合適的下載器處理函數(shù)(download handler)被調(diào)用港准, 該request被執(zhí)行(其response被下載)旨剥。
如果其返回 Response 對(duì)象,Scrapy將不會(huì)調(diào)用任何其他的 浅缸。
process_request() 或 process_exception() 方法轨帜,或相應(yīng)地下載函數(shù); 其將返回該response衩椒。 已安裝的中間件的 process_response() 方法則會(huì)在每個(gè)response返回時(shí)被調(diào)用蚌父。
如果其返回 Request 對(duì)象,Scrapy則停止調(diào)用 process_request方法并重新調(diào)度返回的request毛萌。當(dāng)新返回的request被執(zhí)行后苟弛, 相應(yīng)地中間件鏈將會(huì)根據(jù)下載的response被調(diào)用。
如果其raise一個(gè) IgnoreRequest 異常阁将,則安裝的下載中間件的 process_exception() 方法會(huì)被調(diào)用膏秫。如果沒有任何一個(gè)方法處理該異常, 則request的errback(Request.errback)方法會(huì)被調(diào)用冀痕。如果沒有代碼處理拋出的異常荔睹, 則該異常被忽略且不記錄(不同于其他異常那樣)。
參數(shù):
request (Request 對(duì)象) – 處理的request
spider (Spider 對(duì)象) – 該request對(duì)應(yīng)的spider
process_response(request, response, spider)
process_request() 必須返回以下之一: 返回一個(gè) Response 對(duì)象言蛇、 返回一個(gè) Request 對(duì)象或raise一個(gè) IgnoreRequest 異常僻他。
如果其返回一個(gè) Response (可以與傳入的response相同,也可以是全新的對(duì)象)腊尚, 該response會(huì)被在鏈中的其他中間件的 process_response() 方法處理吨拗。
如果其返回一個(gè) Request 對(duì)象,則中間件鏈停止, 返回的request會(huì)被重新調(diào)度下載劝篷。處理類似于 process_request() 返回request所做的那樣哨鸭。
如果其拋出一個(gè) IgnoreRequest 異常,則調(diào)用request的errback(Request.errback)娇妓。 如果沒有代碼處理拋出的異常像鸡,則該異常被忽略且不記錄(不同于其他異常那樣)。
參數(shù):
request (Request 對(duì)象) – response所對(duì)應(yīng)的request
response (Response 對(duì)象) – 被處理的response
spider (Spider 對(duì)象) – response所對(duì)應(yīng)的spider
process_exception(request, exception, spider)
當(dāng)下載處理器(download handler)或 process_request() (下載中間件)拋出異常(包括 IgnoreRequest 異常)時(shí)哈恰, Scrapy調(diào)用 process_exception() 只估。
process_exception() 應(yīng)該返回以下之一: 返回 None 、 一個(gè) Response 對(duì)象着绷、或者一個(gè) Request 對(duì)象蛔钙。
如果其返回 None ,Scrapy將會(huì)繼續(xù)處理該異常荠医,接著調(diào)用已安裝的其他中間件的 process_exception() 方法吁脱,直到所有中間件都被調(diào)用完畢,則調(diào)用默認(rèn)的異常處理彬向。
如果其返回一個(gè) Response 對(duì)象兼贡,則已安裝的中間件鏈的 process_response() 方法被調(diào)用。Scrapy將不會(huì)調(diào)用任何其他中間件的 process_exception() 方法幢泼。
如果其返回一個(gè) Request 對(duì)象紧显, 則返回的request將會(huì)被重新調(diào)用下載。這將停止中間件的 process_exception() 方法執(zhí)行缕棵,就如返回一個(gè)response的那樣孵班。
參數(shù) :
request (是 Request 對(duì)象) – 產(chǎn)生異常的request
exception (Exception 對(duì)象) – 拋出的異常
spider (Spider 對(duì)象) – request對(duì)應(yīng)的spider
參考文檔: https://www.osgeo.cn/scrapy/topics/exceptions.html#scrapy.exceptions.IgnoreRequest
https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/downloader-middleware.html