Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在scrapy中仅缓存http状态200?_Python_Scrapy - Fatal编程技术网

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'