By defalut Scrapy использует настройку HTTPCACHE_DIR
в FileSystemCacheStorage , которая является частью HttpCacheMiddleware :
class FilesystemCacheStorage(object):
def __init__(self, settings):
self.cachedir = data_path(settings['HTTPCACHE_DIR'])
self.expiration_secs = settings.getint('HTTPCACHE_EXPIRATION_SECS')
self.use_gzip = settings.getbool('HTTPCACHE_GZIP')
self._open = gzip.open if self.use_gzip else open
Как вы можете видетьScrapy читает HTTPCACHE_DIR
, устанавливая параметр только один раз, когда Scrapy создает FilesystemCacheStorage
.Даже если вы как-то измените настройку HTTPCACHE_DIR
позже, это не изменит кеширование.
Существует единственный способ изменить кеширование во время процесса очистки - это изменить свойство cachedir
объекта FilesystemCacheStorage
.Вы можете реализовать это в своем коде паука:
(для scrapy crawl myspider -a HTTPCACHE_DIR="cache_dir"
)
import scrapy
class MySpider(scrapy.Spider):
def start_requests(self):
if self.HTTPCACHE_DIR:
#Select downloader middlewares
downloader_middlewares = self.crawler.engine.downloader.middleware.middlewares
#Select HttpCacheMiddleware
HttpCacheMiddleware = [middleware for middleware in downloader_middlewares if "HttpCacheMiddleware" in str(type(middleware))][0]
#Change cachedir
HttpCacheMiddleware.storage.cachedir = scrapy.utils.project.data_path(self.HTTPCACHE_DIR)