Инициализация настройки Scrapy со значениями, принятыми от пользователя в качестве аргумента - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу установить для параметра HTTPCACHE_DIR значение, которое пользователь предоставляет через пользовательские аргументы.

1 Ответ

0 голосов
/ 20 февраля 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...