SCRAPY에서 DOWNLOADER_IDDLEWARES 중간부품 구성 순서

3004 단어
setting에서 중간부품을 사용자 정의하여 각종 리퀘스트,response,exception 메시지를 받아들일 수 있습니다. 예를 들어 어떤 사람은 요청 시간이 초과되었을 때 처리를 하고 싶고, 어떤 사람은 리퀘스트에 에이전트를 설정하고 싶습니다
DOWNLOADER_MIDDLEWARES = {
'discountSpider.middlewares.ProcessMiddleware':90,    
'discountSpider.middlewares.ProxyMiddleware': 750, 
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 751, 
'discountSpider.middlewares.RandomUserAgent': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
}

하지만 중간부품의 순서가 중요합니다. 프로세스를 캡처하려면_request는 앞에 있을수록 일찍 통지를 받고 뒤로 순서대로 통지합니다. 의외의 말은 없습니다.하지만 캡처 프로세스라면 _response,request 요청이 완료되면response 메시지를 되돌려줍니다. 정상적으로 다운로드가 완료되면 첫 번째 중간부품으로 알림을 받고 순서를 뒤로 알립니다.그러나 요청 시간 초과, 요청이retry되면 첫 번째 알림이 전송되지 않고 scrapy 기본 중간부품의 위치에 따라 전송됩니다. 중간부품의 순서를 분배하려면 DOWNLOADER_MIDDLEWARES_BASE 설정 후 중간부품을 배치할 위치에 따라 값을 선택합니다.모든 중간부품이 다른 동작을 수행하기 때문에, 당신의 중간부품은 이전(또는 그 후)에 실행된 중간부품에 의존할 수 있기 때문에 순서가 매우 중요합니다.
예를 들어 DOWNLOADER_MIDDLEWARES_BASE에서'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500, 사용자 정의 중간부품 번호를 100으로 설정하면 다운로드기에서 504 500 오류가 발생합니다.retry가 필요하면response 상태가retry라는 메시지를 뒤에 중간부품으로 알립니다. 중간부품의process_응답은 메시지를 받을 수 없습니다. 500번 번호부터 뒤로 통지하기 때문에 중간 부품 번호를 500번 번호로 바꾸면 메시지를 받을 수 있습니다.
또 예를 들면'scrapy.contrib.downloadermiddleware.downloadtimeout.Download Timeout Middleware': 350, 다운로드 페이지의 시간 초과 메시지를 받고 싶으면 중간부품을 350 이후에process_response가 있어야 메시지를 받을 수 있습니다.다운로드 시간이 초과되면 scrapy가 직접 scrapy를 찾을 수 있기 때문이다.contrib.downloadermiddleware.downloadtimeout.Download Timeout Middleware 모듈의 위치 350, 알림, 그리고 메시지는 뒤에 있는 400500550700 등 위치의 중간부품을 순서대로 알려줍니다.만약 당신의 중간부품의 위치가 100 따위라면, 그것은 소식을 받지 못할 것이다.
다음은 기본 중간부품의 정보를 첨부합니다
DOWNLOADER_MIDDLEWARES_BASE
{
    'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,
    'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
    'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,
    'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,
    'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,
    'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,
    'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,
}

좋은 웹페이지 즐겨찾기