Python 如何在scrapy中仅缓存http状态200?
我正在使用Python 如何在scrapy中仅缓存http状态200?,python,scrapy,Python,Scrapy,我正在使用scrapy.downloadermiddleware.httpcache.HttpCacheMiddleware缓存scrapy请求。我只想在状态为200时缓存它。这是默认行为吗?或者我是否需要将HTTPCACHE\u IGNORE\u HTTP\u code指定为除200之外的所有内容?是,默认情况下HttpCacheMiddleware为请求运行dummycolicy。它本身几乎没有什么特别的功能,所以您需要将HTTPCACHE\u IGNORE\u HTTP\u CODES设置
scrapy.downloadermiddleware.httpcache.HttpCacheMiddleware
缓存scrapy请求。我只想在状态为200时缓存它。这是默认行为吗?或者我是否需要将HTTPCACHE\u IGNORE\u HTTP\u code
指定为除200之外的所有内容?是,默认情况下HttpCacheMiddleware
为请求运行dummycolicy
。它本身几乎没有什么特别的功能,所以您需要将HTTPCACHE\u IGNORE\u HTTP\u CODES
设置为除200之外的所有值
这是真正重要的几句话:
class DummyPolicy(object):
def __init__(self, settings):
self.ignore_http_codes = [int(x) for x in settings.getlist('HTTPCACHE_IGNORE_HTTP_CODES')]
def should_cache_response(self, response, request):
return response.status not in self.ignore_http_codes
因此,实际上,您也可以将其扩展并覆盖
should\u cache\u response()
,以明确检查200
,即return response.status==200
,然后通过将其设置为缓存策略。答案是否,您不需要这样做。
您应该编写缓存策略并更新settings.py以启用策略
我将CachePolicy类放在middleware.py中
from scrapy.extensions.httpcache import DummyPolicy
class CachePolicy(DummyPolicy):
def should_cache_response(self, response, request):
return response.status == 200
然后更新settings.py,添加以下行
HTTPCACHE_POLICY = 'yourproject.middlewares.CachePolicy'