Настройки

Параметры Scrapy позволяют настраивать поведение всех компонентов Scrapy, включая ядро, расширения, конвейеры и сами пауки.

Инфраструктура параметров обеспечивает глобальное пространство имён сопоставлений «ключ-значение», которое код может использовать для извлечения значений конфигурации. Параметры могут быть заполнены с помощью различных механизмов, которые описаны ниже.

Настройки также являются механизмом выбора текущего активного проекта Scrapy (если у вас их много).

Список доступных встроенных настроек см .: Справочник по встроенным настройкам.

Обозначение настроек

Когда вы используете Scrapy, вы должны указать ему, какие настройки вы используете. Вы можете сделать это с помощью переменной среды SCRAPY_SETTINGS_MODULE.

Значение SCRAPY_SETTINGS_MODULE должно быть в синтаксисе пути Python, например myproject.settings. Обратите внимание, что модуль настроек должен быть Python путём поиска импортов.

Заполнение настроек

Параметры могут быть заполнены с помощью различных механизмов, каждый из которых имеет разный приоритет. Вот их список в порядке убывания приоритета:

  1. Параметры командной строки (высший приоритет)

  2. Настройки для паука

  3. Модуль настроек проекта

  4. Настройки по умолчанию для каждой команды

  5. Глобальные настройки по умолчанию (без приоритета)

О заполнении данных источников настроек заботятся внутренние, но возможна ручная обработка с использованием вызовов API. См. раздел API настроек для справки.

Данные механизмы описаны более подробно ниже.

1. Параметры командной строки

Аргументы, предоставляемые командной строкой, имеют наибольший приоритет и имеют приоритет над любыми другими параметрами. Вы можете явно переопределить один (или несколько) параметров с помощью параметра командной строки -s (или --set).

Пример:

scrapy crawl myspider -s LOG_FILE=scrapy.log

2. Настройки паука

Пауки (см. главу Пауки для справки) могут определять свои собственные настройки, которые будут иметь приоритет и переопределить настройки проекта. Они могут сделать это, установив свой атрибут custom_settings:

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'SOME_SETTING': 'some value',
    }

3. Модуль настройки проекта

Модуль настроек проекта — это стандартный файл конфигурации для вашего проекта Scrapy, в котором будет заполнено большинство ваших пользовательских настроек. Для стандартного проекта Scrapy это означает, что вы будете добавлять или изменять настройки в файле settings.py, созданном для вашего проекта.

4. Настройки по умолчанию для каждой команды

Каждая команда инструмента Scrapy может иметь свои собственные настройки по умолчанию, у которых приоритет над глобальными настройками по умолчанию. Данные настраиваемые параметры команды указаны в атрибуте default_settings класса команды.

5. Глобальные настройки по умолчанию

Глобальные значения по умолчанию находятся в модуле scrapy.settings.default_settings и задокументированы в разделе Справочник по встроенным настройкам.

Импортировать пути и классы

Добавлено в версии 2.4.0.

Когда параметр ссылается на вызываемый объект, который должен быть импортирован Scrapy, такой как класс или функция, есть два разных способа указать данный объект:

  • В виде строки, содержащей путь импорта этого объекта

  • Как сам объект

Например:

from mybot.pipelines.validate import ValidateMyItem
ITEM_PIPELINES = {
    # passing the classname...
    ValidateMyItem: 300,
    # ...equals passing the class path
    'mybot.pipelines.validate.ValidateMyItem': 300,
}

Примечание

Передача невызываемых объектов не поддерживается.

Как получить доступ к настройкам

В пауке настройки доступны через self.settings:

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        print(f"Existing settings: {self.settings.attributes.keys()}")

Примечание

Атрибут settings устанавливается в базовом классе Spider после инициализации паука. Если вы хотите использовать настройки перед инициализацией (например, в методе вашего паука __init__()), вам необходимо переопределить метод from_crawler().

Доступ к настройкам можно получить через атрибут scrapy.crawler.Crawler.settings Crawler, который передаётся методу from_crawler в расширениях, промежуточном программном обеспечении и конвейерах элементов:

class MyExtension:
    def __init__(self, log_is_enabled=False):
        if log_is_enabled:
            print("log is enabled!")

    @classmethod
    def from_crawler(cls, crawler):
        settings = crawler.settings
        return cls(settings.getbool('LOG_ENABLED'))

Объект настроек можно использовать как dict (например, settings['LOG_ENABLED']), но обычно предпочтительно извлекать настройку в нужном вам формате, чтобы избежать ошибок типа, используя один из методов, предоставляемых API Settings.

Обоснование установки имён

Имена настроек обычно начинаются с префикса компонента, который они настраивают. Например, имена собственных настроек для вымышленного расширения robots.txt будут ROBOTSTXT_ENABLED, ROBOTSTXT_OBEY, ROBOTSTXT_CACHEDIR и т. д.

Справочник по встроенным настройкам

Вот список всех доступных настроек Scrapy в алфавитном порядке, а также их значения по умолчанию и область применения.

Область, где она доступна, показывает, где используется параметр, если он привязан к какому-либо конкретному компоненту. В этом случае будет показан модуль этого компонента, обычно это расширение, промежуточное программное обеспечение или конвейер. Это также означает, что компонент должен быть включён, чтобы настройка имела какой-либо эффект.

AWS_ACCESS_KEY_ID

По умолчанию: None

Ключ доступа к AWS, используемый кодом, который требует доступа к AWS , например бэкенд для хранения фидов S3.

AWS_SECRET_ACCESS_KEY

По умолчанию: None

Секретный ключ AWS, используемый кодом, который требует доступа к AWS , например бэкенд для хранения фидов S3.

AWS_SESSION_TOKEN

По умолчанию: None

Маркер безопасности AWS, используемый кодом, который требует доступа к AWS, например бэкенд для хранения фидов S3, при использовании временные учетные данные безопасности.

AWS_ENDPOINT_URL

По умолчанию: None

URL-адрес конечной точки, используемый для S3-подобного хранилища, например Minio или s3.scality.

AWS_USE_SSL

По умолчанию: None

Используйте эту опцию, если вы хотите отключить SSL-соединение для связи с S3 или S3-подобным хранилищем. По умолчанию будет использоваться SSL.

AWS_VERIFY

По умолчанию: None

Проверить SSL-соединение между Scrapy и S3 или S3-подобным хранилищем. По умолчанию будет выполняться проверка SSL.

AWS_REGION_NAME

По умолчанию: None

Название региона, связанного с клиентом AWS.

ASYNCIO_EVENT_LOOP

По умолчанию: None

Путь импорта заданного класса событийного цикла asyncio.

Если асинхронный реактор включён (см. TWISTED_REACTOR), данный параметр можно использовать для указания событийного цикла asyncio, который будет использоваться с ним. Задаёт для параметра путь импорта желаемого класса событийного цикла asyncio. Если для параметра установлено значение None, будет использоваться событийный цикл asyncio по умолчанию.

Если вы устанавливаете асинхронный реактор вручную с помощью функции install_reactor(), вы можете использовать параметр event_loop_path, чтобы указать путь импорта используемого класса событийного цикла.

Обратите внимание, что класс событийного цикла должен быть унаследован от asyncio.AbstractEventLoop.

Осторожно

Имейте в виду, что при использовании нестандартного событийного цикла (определённого через ASYNCIO_EVENT_LOOP или установленного с install_reactor()) Scrapy вызовет asyncio.set_event_loop(), который установит указанный событийный цикл в качестве текущего цикла для текущего потока ОС.

BOT_NAME

По умолчанию: 'scrapybot'

Имя бота, реализованного в этом проекте Scrapy (также известное как имя проекта). Это имя также будет использоваться для записи в журнал.

Он автоматически заполняется именем вашего проекта, когда вы создаёте свой проект с помощью команды startproject.

CONCURRENT_ITEMS

По умолчанию: 100

Максимальное количество одновременных элементов (на один ответ) для параллельной обработки в конвейерах элементов.

CONCURRENT_REQUESTS

По умолчанию: 16

Максимальное количество одновременных (т. е. одновременных) запросов, которые будет выполнять загрузчик Scrapy.

CONCURRENT_REQUESTS_PER_DOMAIN

По умолчанию: 8

Максимальное количество одновременных (т. е. одновременных) запросов, которые будут выполняться к любому отдельному домену.

См. также: Расширение AutoThrottle и его вариант AUTOTHROTTLE_TARGET_CONCURRENCY.

CONCURRENT_REQUESTS_PER_IP

По умолчанию: 0

Максимальное количество одновременных (т. е. одновременных) запросов, которые будут выполняться к любому отдельному IP-адресу. Если ненулевое значение, параметр CONCURRENT_REQUESTS_PER_DOMAIN игнорируется и используется вместо него. Другими словами, ограничения параллелизма будут применяться для каждого IP-адреса, а не для домена.

Данный параметр также влияет на DOWNLOAD_DELAY и Расширение AutoThrottle: если CONCURRENT_REQUESTS_PER_IP не равно нулю, задержка загрузки применяется для каждого IP-адреса, а не для домена.

DEFAULT_ITEM_CLASS

По умолчанию: 'scrapy.Item'

Класс по умолчанию, который будет использоваться для создания экземпляров элементов в оболочке Scrapy.

DEFAULT_REQUEST_HEADERS

По умолчанию:

{
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
}

Заголовки по умолчанию, используемые для HTTP-запросов Scrapy. Они заселены в DefaultHeadersMiddleware.

Осторожно

Cookie, установленные с помощью заголовка Cookie, не рассматриваются CookiesMiddleware. Если вам нужно установить куки для запроса, используйте параметр Request.cookies. Это известное текущее ограничение, над которым сейчас работают.

DEPTH_LIMIT

По умолчанию: 0

Область применения: scrapy.spidermiddlewares.depth.DepthMiddleware

Максимальная глубина сканирования для любого сайта. Если ноль, никаких ограничений не будет.

DEPTH_PRIORITY

По умолчанию: 0

Область применения: scrapy.spidermiddlewares.depth.DepthMiddleware

Целое число, которое используется для настройки priority Request в зависимости от его глубины.

Приоритет запроса настраивается следующим образом:

request.priority = request.priority - ( depth * DEPTH_PRIORITY )

По мере увеличения глубины положительные значения DEPTH_PRIORITY уменьшают приоритет запроса (BFO), а отрицательные значения увеличивают приоритет запроса (DFO). См. также Сканирует ли Scrapy в ширину или в глубину?.

Примечание

Данный параметр регулирует приоритет наоборот по сравнению с другими параметрами приоритета REDIRECT_PRIORITY_ADJUST и RETRY_PRIORITY_ADJUST.

DEPTH_STATS_VERBOSE

По умолчанию: False

Область применения: scrapy.spidermiddlewares.depth.DepthMiddleware

Следует ли собирать подробную статистику глубины. Если это включено, количество запросов для каждой глубины собирается в статистике.

DNSCACHE_ENABLED

По умолчанию: True

Следует ли включать кеширование DNS в памяти.

DNSCACHE_SIZE

По умолчанию: 10000

Размер кэша в памяти DNS.

DNS_RESOLVER

Добавлено в версии 2.0.

По умолчанию: 'scrapy.resolver.CachingThreadedResolver'

Класс, который будет использоваться для разрешения имён DNS. По умолчанию scrapy.resolver.CachingThreadedResolver поддерживает указание тайм-аута для DNS-запросов с помощью параметра DNS_TIMEOUT, но работает только с IPv4-адресами. Scrapy предоставляет альтернативный преобразователь, scrapy.resolver.CachingHostnameResolver, который поддерживает адреса IPv4/IPv6, но не учитывает настройку DNS_TIMEOUT.

DNS_TIMEOUT

По умолчанию: 60

Таймаут обработки DNS-запросов в секундах. Поддерживается плавающий режим.

DOWNLOADER

По умолчанию: 'scrapy.core.downloader.Downloader'

Загрузчик, используемый для сканирования.

DOWNLOADER_HTTPCLIENTFACTORY

По умолчанию: 'scrapy.core.downloader.webclient.ScrapyHTTPClientFactory'

Определяет класс Twisted protocol.ClientFactory для использования для соединений HTTP/1.0 (для HTTP10DownloadHandler).

Примечание

HTTP/1.0 в настоящее время используется редко, поэтому вы можете спокойно игнорировать данный параметр, если вы действительно не хотите использовать HTTP/1.0 и соответственно переопределить DOWNLOAD_HANDLERS для схемы http(s), т. е. на 'scrapy.core.downloader.handlers.http.HTTP10DownloadHandler'.

DOWNLOADER_CLIENTCONTEXTFACTORY

По умолчанию: 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory'

Представляет путь к классу ContextFactory для использования.

Здесь «ContextFactory» — это термин Twisted для контекстов SSL/TLS, определяющий версию протокола TLS/SSL, которую нужно использовать, выполнять ли проверку сертификата или даже включать аутентификацию на стороне клиента (и многое другое).

Примечание

Scrapy фабрика контекста по умолчанию НЕ выполняет проверку сертификата удаленного сервера. Обычно это подходит для парсинга веб-страниц.

Если вам действительно нужна проверка сертификата удаленного сервера, Scrapy также имеет другой класс фабрики контекста, который вы можете установить, 'scrapy.core.downloader.contextfactory.BrowserLikeContextFactory', который использует сертификаты платформы для проверки удаленных конечных точек.

Если вы действительно используете настраиваемую ContextFactory, убедиться, что его метод __init__ принимает параметр method (это отображение метода OpenSSL.SSL DOWNLOADER_CLIENT_TLS_METHOD), параметр tls_verbose_logging (bool) и параметр tls_ciphers (см. DOWNLOADER_CLIENT_TLS_CIPHERS).

DOWNLOADER_CLIENT_TLS_CIPHERS

По умолчанию: 'DEFAULT'

Используйте данный параметр для настройки шифров TLS/SSL, используемых загрузчиком HTTP/1.1 по умолчанию.

Параметр должен содержать строку в OpenSSL формата списка шифров, данные шифры будут использоваться в качестве клиентских шифров. Изменение этого параметра может быть необходимо для доступа к определенным веб-сайтам HTTPS: например, вам может потребоваться использовать 'DEFAULT:!DH' для веб-сайта со слабыми параметрами DH или включить определенный шифр, который не включён в DEFAULT, если веб-сайт требует этого.

DOWNLOADER_CLIENT_TLS_METHOD

По умолчанию: 'TLS'

Используйте данный параметр, чтобы настроить метод TLS/SSL, используемый загрузчиком HTTP/1.1 по умолчанию.

Данный параметр должен быть одним из данных строковых значений:

  • 'TLS': соответствует OpenSSL TLS_method() (он же SSLv23_method()), который позволяет согласовывать протоколы, начиная с самого высокого уровня, поддерживаемого платформой; по умолчанию, рекомендуется

  • 'TLSv1.0': это значение заставляет HTTPS-соединения использовать TLS версии 1.0; устанавливает это, если хотите, чтобы Scrapy<1.1

  • 'TLSv1.1': принудительное использование TLS версии 1.1

  • 'TLSv1.2': принудительное использование TLS версии 1.2

  • 'SSLv3': принудительное использование SSL версии 3 (не рекомендуется)

DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING

По умолчанию: False

Установка этого параметра на True включит сообщения уровня DEBUG о параметрах соединения TLS после установления соединений HTTPS. Тип регистрируемой информации зависит от версий OpenSSL и pyOpenSSL.

Данный параметр используется только для DOWNLOADER_CLIENTCONTEXTFACTORY по умолчанию.

DOWNLOADER_MIDDLEWARES

По умолчанию: {}

Dict, содержащий промежуточное программное обеспечение загрузчика, включенное в вашем проекте, и их заказы. Для получения дополнительной информации см. Активация промежуточного программного обеспечения загрузчика.

DOWNLOADER_MIDDLEWARES_BASE

По умолчанию:

{
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

Dict, содержащий промежуточное ПО загрузчика, включенное по умолчанию в Scrapy. Низкие заказы ближе к движку, высокие заказы ближе к загрузчику. Никогда не изменяйте данный параметр в своём проекте, вместо этого изменить DOWNLOADER_MIDDLEWARES. Для получения дополнительной информации см. Активация промежуточного программного обеспечения загрузчика.

DOWNLOADER_STATS

По умолчанию: True

Включать ли сбор статистики загрузчика.

DOWNLOAD_DELAY

По умолчанию: 0

Время (в секундах), которое загрузчик должен подождать перед загрузкой последовательных страниц с одного и того же веб-сайта. Это можно использовать для ограничения скорости сканирования, чтобы избежать слишком сильного удара по серверам. Поддерживаются десятичные числа. Пример:

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

На данный параметр также влияет параметр RANDOMIZE_DOWNLOAD_DELAY (который включён по умолчанию). По умолчанию Scrapy не ждет фиксированное время между запросами, а использует случайный интервал между 0,5 * DOWNLOAD_DELAY и 1.5 * DOWNLOAD_DELAY.

Когда CONCURRENT_REQUESTS_PER_IP не равно нулю, задержки применяются для каждого IP-адреса, а не для домена.

Вы также можете изменить данный параметр для каждого паука, установив атрибут паука download_delay.

DOWNLOAD_HANDLERS

По умолчанию: {}

Dict, содержащий обработчики загрузчика запросов, включенные в вашем проекте. См. пример формата DOWNLOAD_HANDLERS_BASE.

DOWNLOAD_HANDLERS_BASE

По умолчанию:

{
    'data': 'scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler',
    'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
    'http': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler',
    'https': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler',
    's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
    'ftp': 'scrapy.core.downloader.handlers.ftp.FTPDownloadHandler',
}

Словарь, содержащий обработчики загрузки запросов, включенные по умолчанию в Scrapy. Вы никогда не должны изменять данный параметр в своём проекте, вместо этого изменить DOWNLOAD_HANDLERS.

Вы можете отключить любой из данных обработчиков загрузки, назначив None их схеме URI в DOWNLOAD_HANDLERS. Например, чтобы отключить встроенный обработчик FTP (без замены), поместите его в свой settings.py:

DOWNLOAD_HANDLERS = {
    'ftp': None,
}

Обработчик HTTPS по умолчанию использует HTTP/1.1. Чтобы использовать HTTP/2:

  1. Устанавливает Twisted[http2]>=17.9.0, чтобы установить пакеты, необходимые для включения поддержки HTTP/2 в Twisted.

  2. Обновляет DOWNLOAD_HANDLERS следующим образом:

    DOWNLOAD_HANDLERS = {
        'https': 'scrapy.core.downloader.handlers.http2.H2DownloadHandler',
    }
    

Предупреждение

Поддержка HTTP/2 в Scrapy является экспериментальной и пока не рекомендуется для производственных сред. В будущих версиях Scrapy могут быть внесены соответствующие изменения без периода прекращения поддержки или предупреждения.

Примечание

Известные ограничения текущей реализации HTTP/2 Scrapy включают:

  • Отсутствует поддержка открытого текста HTTP/2 (h2c), поскольку ни один из основных браузеров не поддерживает незашифрованный HTTP/2.

  • Нет настройки, чтобы указать максимальное значение размера фрейма, превышающее значение по умолчанию, 16384. Соединения с серверами, которые отправляют больший фрейм, завершатся ошибкой.

  • Нет поддержки серверных пушей, которые игнорируются.

  • Нет поддержки сигналов bytes_received и headers_received.

DOWNLOAD_TIMEOUT

По умолчанию: 180

Время (в секундах), в течение которого загрузчик будет ждать до истечения времени ожидания.

Примечание

Данный тайм-аут может быть установлен для каждого паука с помощью атрибута паука download_timeout и для каждого запроса с помощью ключа download_timeout Request.meta.

DOWNLOAD_MAXSIZE

По умолчанию: 1073741824 (1024 МБ)

Максимальный размер ответа (в байтах), который загрузит загрузчик.

Если вы хотите отключить его, устанавливает значение 0.

Примечание

Данный размер может быть установлен для каждого паука с помощью атрибута паука download_maxsize и для каждого запроса с помощью ключа download_maxsize Request.meta.

DOWNLOAD_WARNSIZE

По умолчанию: 33554432 (32 МБ)

Размер ответа (в байтах), который загрузчик начнет предупреждать.

Если вы хотите отключить его, устанавливает значение 0.

Примечание

Данный размер можно установить для каждого паука с помощью атрибута паука download_warnsize и для каждого запроса с помощью ключа download_warnsize Request.meta.

DOWNLOAD_FAIL_ON_DATALOSS

По умолчанию: True

Независимо от того, завершается ли сбой при неработающих ответах, т. е. объявленный Content-Length не соответствует содержимому, отправленному сервером, или фрагментированный ответ не был завершён должным образом. Если True, данные ответы вызывают ошибку ResponseFailed([_DataLoss]). Если False, данные ответы проходят, и к ответу добавляется флаг dataloss, т. е.: 'dataloss' in response.flags — это True.

При желании это можно установить для каждого запроса с помощью ключа download_fail_on_dataloss Request.meta для False.

Примечание

Неисправный ответ или ошибка потери данных может произойти при нескольких обстоятельствах, от неправильной конфигурации сервера до сетевых ошибок и повреждения данных. Пользователь сам решает, имеет ли смысл обрабатывать неработающие ответы, учитывая, что они могут содержать частичное или неполное содержание. Если RETRY_ENABLED — это True и данный параметр установлен на True, ошибка ResponseFailed([_DataLoss]) будет повторена как обычно.

Предупреждение

Данный параметр игнорируется обработчиком загрузки H2DownloadHandler (см. DOWNLOAD_HANDLERS). В случае ошибки потери данных соответствующее соединение HTTP/2 может быть повреждено, что повлияет на другие запросы, использующие то же соединение; следовательно, сбой ResponseFailed([InvalidBodyLengthError]) всегда возникает для каждого запроса, который использовал это соединение.

DUPEFILTER_CLASS

По умолчанию: 'scrapy.dupefilters.RFPDupeFilter'

Класс, используемый для обнаружения и фильтрации повторяющихся запросов.

По умолчанию (RFPDupeFilter) фильтры основаны на отпечатке пальца запроса с использованием функции scrapy.utils.request.request_fingerprint. Чтобы изменить способ проверки дубликатов, вы можете создать подкласс RFPDupeFilter и переопределить его метод request_fingerprint. Данный метод должен принимать объект scrapy Request и возвращать его отпечаток пальца (строку).

Вы можете отключить фильтрацию повторяющихся запросов, установив для DUPEFILTER_CLASS значение 'scrapy.dupefilters.BaseDupeFilter'. Однако будьте очень осторожны с этим, потому что вы можете попасть в петли. Обычно лучше установить для параметра dont_filter значение True на конкретном Request, который не следует фильтровать.

DUPEFILTER_DEBUG

По умолчанию: False

По умолчанию RFPDupeFilter регистрирует только первый повторяющийся запрос. Установка DUPEFILTER_DEBUG на True заставит регистрировать все повторяющиеся запросы.

EDITOR

По умолчанию: vi (в системах Unix) или редактор IDLE (в Windows)

Редактор для редактирования пауков с помощью команды edit. Кроме того, если задана переменная среды EDITOR, команда edit предпочтет её параметру по умолчанию.

EXTENSIONS

По умолчанию: {}

Dict, содержащий расширения, включенные в вашем проекте, и их порядок.

EXTENSIONS_BASE

По умолчанию:

{
    'scrapy.extensions.corestats.CoreStats': 0,
    'scrapy.extensions.telnet.TelnetConsole': 0,
    'scrapy.extensions.memusage.MemoryUsage': 0,
    'scrapy.extensions.memdebug.MemoryDebugger': 0,
    'scrapy.extensions.closespider.CloseSpider': 0,
    'scrapy.extensions.feedexport.FeedExporter': 0,
    'scrapy.extensions.logstats.LogStats': 0,
    'scrapy.extensions.spiderstate.SpiderState': 0,
    'scrapy.extensions.throttle.AutoThrottle': 0,
}

Словарь, содержащий расширения, доступные по умолчанию в Scrapy, и их порядки. Данный параметр содержит все стабильные встроенные расширения. Имейте в виду, что некоторые из них нужно включить через настройку.

Для получения дополнительной информации см. руководство пользователя расширений и список доступных расширений.

FEED_TEMPDIR

Каталог Feed Temp позволяет вам установить пользовательскую папку для сохранения временных файлов сканера перед загрузкой с помощью FTP фид storage и Amazon S3.

FEED_STORAGE_GCS_ACL

Список управления доступом (ACL), используемый при сохранении элементов в Google Cloud Storage. Для получения дополнительной информации о том, как установить это значение, обратитесь к столбцу JSON API в документации Google Cloud.

FTP_PASSIVE_MODE

По умолчанию: True

Следует ли использовать пассивный режим при инициировании передачи по FTP.

FTP_PASSWORD

По умолчанию: "guest"

Пароль, который будет использоваться для FTP-подключений, если в метаданных Request нет "ftp_password".

Примечание

Перефразируя RFC 1635, хотя обычно для анонимного FTP используется либо пароль «guest», либо свой адрес электронной почты, некоторые серверы FTP явно запрашивают адрес электронной почты пользователя и не разрешают вход с паролем «guest».

FTP_USER

По умолчанию: "anonymous"

Имя пользователя, которое будет использоваться для FTP-подключений, если в мета-мета Request отсутствует "ftp_user".

GCS_PROJECT_ID

По умолчанию: None

Идентификатор проекта, который будет использоваться при хранении данных на Google Cloud Storage.

ITEM_PIPELINES

По умолчанию: {}

Dict, содержащий используемые конвейеры элементов и их заказы. Значения заказов произвольны, но принято определять их в диапазоне от 0 до 1000. Более низкие заказы обрабатываются перед более высокими заказами.

Пример:

ITEM_PIPELINES = {
    'mybot.pipelines.validate.ValidateMyItem': 300,
    'mybot.pipelines.validate.StoreMyItem': 800,
}

ITEM_PIPELINES_BASE

По умолчанию: {}

Словарь, содержащий конвейеры, включенные по умолчанию в Scrapy. Вы никогда не должны изменять данный параметр в своём проекте, вместо этого изменить ITEM_PIPELINES.

JOBDIR

По умолчанию: ''

Строка, указывающая каталог для хранения состояния сканирования, когда приостановка и возобновление сканирования.

LOG_ENABLED

По умолчанию: True

Включено ли журналирование.

LOG_ENCODING

По умолчанию: 'utf-8'

Кодировка, используемая для ведения журнала.

LOG_FILE

По умолчанию: None

Имя файла, которое будет использоваться для вывода журнала. Если None, будет использоваться стандартная ошибка.

LOG_FILE_APPEND

По умолчанию: True

Если False, файл журнала, указанный в LOG_FILE, будет перезаписан (без учета вывода предыдущих запусков, если таковые были).

LOG_FORMAT

По умолчанию: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'

Строка для форматирования сообщений журнала. Обратитесь к Python документации журналирования за полным списком доступных заполнителей.

LOG_DATEFORMAT

По умолчанию: '%Y-%m-%d %H:%M:%S'

Строка для форматирования даты/времени, расширение заполнителя %(asctime)s в LOG_FORMAT. Обратитесь к Python datetime документации за полным списком доступных директив.

LOG_FORMATTER

По умолчанию: scrapy.logformatter.LogFormatter

Класс, используемый для форматирования ообщений журнала для различных действий.

LOG_LEVEL

По умолчанию: 'DEBUG'

Минимальный уровень для журналирования. Доступные уровни: CRITICAL, ERROR, WARNING, INFO, DEBUG. Для получения дополнительной информации см. Логирование.

LOG_STDOUT

По умолчанию: False

Если True, весь стандартный вывод (и ошибки) вашего процесса будут перенаправлены в журнал. Например, если вы print('hello'), он появится в журнале Scrapy.

LOG_SHORT_NAMES

По умолчанию: False

Если True, журналы будут содержать только корневой путь. Если установлено значение False, то отображается компонент, отвечающий за вывод журнала

LOGSTATS_INTERVAL

По умолчанию: 60.0

Интервал (в секундах) между каждой распечаткой журнала статистики по LogStats.

MEMDEBUG_ENABLED

По умолчанию: False

Включать ли отладку памяти.

MEMDEBUG_NOTIFY

По умолчанию: []

Когда включена отладка памяти, отчёт о памяти будет отправлен по указанным адресам, если данный параметр не пуст, в противном случае отчёт будет записан в журнал.

Пример:

MEMDEBUG_NOTIFY = ['[email protected]']

MEMUSAGE_ENABLED

По умолчанию: True

Область применения: scrapy.extensions.memusage

Следует ли включать расширение использования памяти. Это расширение отслеживает пиковую память, используемую процессом (записывает её в статистику). Он также может дополнительно завершить процесс Scrapy, когда он превышает предел памяти (см. MEMUSAGE_LIMIT_MB), и уведомить по электронной почте, когда это произошло (см. MEMUSAGE_NOTIFY_MAIL).

См. Расширение использования памяти.

MEMUSAGE_LIMIT_MB

По умолчанию: 0

Область применения: scrapy.extensions.memusage

Максимальный разрешенный объем памяти (в мегабайтах) перед выключением Scrapy (если MEMUSAGE_ENABLED имеет значение Истина). Если ноль, проверка выполняться не будет.

См. Расширение использования памяти.

MEMUSAGE_CHECK_INTERVAL_SECONDS

По умолчанию: 60.0

Область применения: scrapy.extensions.memusage

Расширение использования памяти проверяет текущее использование памяти по сравнению с ограничениями, установленными MEMUSAGE_LIMIT_MB и MEMUSAGE_WARNING_MB, через фиксированные интервалы времени.

Устанавливает длину данных интервалов в секундах.

См. Расширение использования памяти.

MEMUSAGE_NOTIFY_MAIL

По умолчанию: False

Область применения: scrapy.extensions.memusage

Список писем для уведомления о достижении лимита памяти.

Пример:

MEMUSAGE_NOTIFY_MAIL = ['[email protected]']

См. Расширение использования памяти.

MEMUSAGE_WARNING_MB

По умолчанию: 0

Область применения: scrapy.extensions.memusage

Максимальный разрешенный объем памяти (в мегабайтах) перед отправкой предупреждающего электронного письма с уведомлением об этом. Если ноль, предупреждение не будет.

NEWSPIDER_MODULE

По умолчанию: ''

Модуль для создания новых пауков с помощью команды genspider.

Пример:

NEWSPIDER_MODULE = 'mybot.spiders_dev'

RANDOMIZE_DOWNLOAD_DELAY

По умолчанию: True

Если данный параметр включён, Scrapy будет ожидать случайное время (от 0,5 * DOWNLOAD_DELAY и 1.5 * DOWNLOAD_DELAY) при получении запросов с того же веб-сайта.

Такая рандомизация снижает вероятность обнаружения (и последующей блокировки) поискового робота сайтами, которые анализируют запросы в поисках статистически значимых сходств во времени между их запросами.

Политика рандомизации такая же, как и для параметра wget --random-wait.

Если DOWNLOAD_DELAY равен нулю (по умолчанию), данный параметр не действует.

REACTOR_THREADPOOL_MAXSIZE

По умолчанию: 10

Максимальный предел размера пула потоков Twisted Reactor. Это общий многоцелевой пул потоков, используемый различными компонентами Scrapy. Поточный резолвер DNS, BlockingFeedStorage, S3FilesStore и многие другие. Увеличивает это значение, если у вас возникли проблемы с недостаточной блокировкой ввода-вывода.

REDIRECT_PRIORITY_ADJUST

По умолчанию: +2

Область применения: scrapy.downloadermiddlewares.redirect.RedirectMiddleware

Отрегулировать приоритет запроса перенаправления относительно исходного запроса:

  • положительная настройка приоритета (по умолчанию) означает более высокий приоритет.

  • настройка отрицательного приоритета означает более низкий приоритет.

ROBOTSTXT_OBEY

По умолчанию: False

Область применения: scrapy.downloadermiddlewares.robotstxt

Если данный параметр включён, Scrapy будет соблюдать политики robots.txt. Для получения дополнительной информации см. RobotsTxtMiddleware.

Примечание

Хотя значение по умолчанию — False по историческим причинам, данный параметр включён по умолчанию в файле settings.py, созданном командой scrapy startproject.

ROBOTSTXT_PARSER

По умолчанию: 'scrapy.robotstxt.ProtegoRobotParser'

Бэкэнд парсера, используемый для анализа файлов robots.txt. Для получения дополнительной информации см. RobotsTxtMiddleware.

ROBOTSTXT_USER_AGENT

По умолчанию: None

Строка пользовательского агента, используемая для сопоставления в файле robots.txt. Если None, заголовок User-Agent, который вы отправляете с запросом, или параметр USER_AGENT (в указанном порядке) будет использоваться для определения пользовательского агента в файле robots.txt.

SCHEDULER

По умолчанию: 'scrapy.core.scheduler.Scheduler'

Класс планировщика, который будет использоваться для сканирования. Подробности смотрите в теме Планировщик.

SCHEDULER_DEBUG

По умолчанию: False

При установке значения True в журнал будет заноситься отладочная информация о планировщике запросов. В настоящее время регистрируется (только один раз), если запросы не могут быть сериализованы на диск. Счётчик статистики (scheduler/unserializable) отслеживает, сколько раз это происходит.

Пример записи в логах:

1956-01-31 00:00:00+0800 [scrapy.core.scheduler] ERROR: Unable to serialize request:
<GET http://example.com> - reason: cannot serialize <Request at 0x9a7c7ec>
(type Request)> - no more unserializable requests will be logged
(see 'scheduler/unserializable' stats counter)

SCHEDULER_DISK_QUEUE

По умолчанию: 'scrapy.squeues.PickleLifoDiskQueue'

Тип дисковой очереди, которая будет использоваться планировщиком. Другие доступные типы: scrapy.squeues.PickleFifoDiskQueue, scrapy.squeues.MarshalFifoDiskQueue, scrapy.squeues.MarshalLifoDiskQueue.

SCHEDULER_MEMORY_QUEUE

По умолчанию: 'scrapy.squeues.LifoMemoryQueue'

Тип очереди в памяти, используемой планировщиком. Другой доступный тип: scrapy.squeues.FifoMemoryQueue.

SCHEDULER_PRIORITY_QUEUE

По умолчанию: 'scrapy.pqueues.ScrapyPriorityQueue'

Тип приоритетной очереди, используемой планировщиком. Другой доступный тип — scrapy.pqueues.DownloaderAwarePriorityQueue. scrapy.pqueues.DownloaderAwarePriorityQueue работает лучше, чем scrapy.pqueues.ScrapyPriorityQueue, когда вы просматриваете несколько разных доменов параллельно. Но на данный момент scrapy.pqueues.DownloaderAwarePriorityQueue не работает вместе с CONCURRENT_REQUESTS_PER_IP.

SCRAPER_SLOT_MAX_ACTIVE_SIZE

Добавлено в версии 2.0.

По умолчанию: 5_000_000

Мягкое ограничение (в байтах) для обрабатываемых данных ответа.

Хотя сумма размеров всех обрабатываемых ответов превышает это значение, Scrapy не обрабатывает новые запросы.

SPIDER_CONTRACTS

По умолчанию: {}

Dict, содержащий контракты пауков, включенные в вашем проекте, используемые для тестирования пауков. Для получения дополнительной информации см. Контракты пауков.

SPIDER_CONTRACTS_BASE

По умолчанию:

{
    'scrapy.contracts.default.UrlContract' : 1,
    'scrapy.contracts.default.ReturnsContract': 2,
    'scrapy.contracts.default.ScrapesContract': 3,
}

Dict, содержащий контракты Scrapy, включенные по умолчанию в Scrapy. Никогда не изменяйте данный параметр в своём проекте, вместо этого изменить SPIDER_CONTRACTS. Для получения дополнительной информации см. Контракты пауков.

Вы можете отключить любой из данных контрактов, назначив None их пути к классам в SPIDER_CONTRACTS. Например, чтобы отключить встроенный ScrapesContract, поместите его в свой settings.py:

SPIDER_CONTRACTS = {
    'scrapy.contracts.default.ScrapesContract': None,
}

SPIDER_LOADER_CLASS

По умолчанию: 'scrapy.spiderloader.SpiderLoader'

Класс, который будет использоваться для загрузки пауков, который должен реализовывать SpiderLoader API.

SPIDER_LOADER_WARN_ONLY

По умолчанию: False

По умолчанию, когда Scrapy пытается импортировать классы пауков из SPIDER_MODULES, он терпит неудачу при возникновении исключения ImportError. Но вы можете отключить это исключение и превратить его в простое предупреждение, установив SPIDER_LOADER_WARN_ONLY = True.

Примечание

Некоторые scrapy команды уже работают с этим параметром на True (т.е. они будут выдавать только предупреждение и не обрушиваются), поскольку им фактически не нужно загружать классы пауков для работы: scrapy runspider, scrapy settings, scrapy startproject, scrapy version.

SPIDER_MIDDLEWARES

По умолчанию: {}

Dict, содержащий промежуточное ПО для пауков, включенное в вашем проекте, и их заказы. Для получения дополнительной информации см. Активация ПО обеспечения-паука.

SPIDER_MIDDLEWARES_BASE

По умолчанию:

{
    'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
    'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
    'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
    'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
    'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
}

Dict, содержащий промежуточное ПО для пауков, включенное по умолчанию в Scrapy, и их порядки. Низкие порядки ближе к двигателю, высокие — ближе к пауку. Для получения дополнительной информации см. Активация ПО обеспечения-паука.

SPIDER_MODULES

По умолчанию: []

Список модулей, в которых Scrapy будет искать пауков.

Пример:

SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']

STATS_CLASS

По умолчанию: 'scrapy.statscollectors.MemoryStatsCollector'

Класс, используемый для сбора статистики, который должен реализовывать API сборщика статистики.

STATS_DUMP

По умолчанию: True

Сбрасывает Scrapy статистику (в журнал Scrapy), как только паук закончит работу.

Для получения дополнительной информации см .: Сбор статистики.

STATSMAILER_RCPTS

По умолчанию: [] (пустой список)

Отправить статистику Scrapy после того, как пауки закончат соскабливание. См. StatsMailer для получения дополнительной информации.

TELNETCONSOLE_ENABLED

По умолчанию: True

Логическое значение, которое указывает, будет ли включена telnet консоль (при условии, что его расширение также включено).

TEMPLATES_DIR

По умолчанию: templates, директория внутри модуля scrapy

Каталог, в котором искать шаблоны при создании новых проектов с помощью команды startproject и новых пауков с помощью команды genspider.

Имя проекта не должно конфликтовать с именем пользовательских файлов или каталогов в подкаталоге project.

TWISTED_REACTOR

Добавлено в версии 2.0.

По умолчанию: None

Путь импорта данного reactor.

Scrapy установит данный реактор, если другой реактор ещё не установлен, например, при вызове программы scrapy CLI или при использовании класса CrawlerProcess.

Если вы используете класс CrawlerRunner, вам также необходимо установить правильный реактор вручную. Вы можете сделать это с помощью install_reactor():

Если реактор уже установлен, install_reactor() не действует.

CrawlerRunner.__init__ вызывает Exception, если установленный реактор не соответствует настройке TWISTED_REACTOR; поэтому наличие импорта reactor верхнего уровня в файлах проекта и импортированных сторонних библиотек заставит Scrapy поднять Exception при проверке установленного реактора.

Для использования установлен реактор Scrapy:

import scrapy
from twisted.internet import reactor


class QuotesSpider(scrapy.Spider):
    name = 'quotes'

    def __init__(self, *args, **kwargs):
        self.timeout = int(kwargs.pop('timeout', '60'))
        super(QuotesSpider, self).__init__(*args, **kwargs)

    def start_requests(self):
        reactor.callLater(self.timeout, self.stop)

        urls = ['http://quotes.toscrape.com/page/1']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {'text': quote.css('span.text::text').get()}

    def stop(self):
        self.crawler.engine.close_spider(self, 'timeout')

который вызывает Exception, становится:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = 'quotes'

    def __init__(self, *args, **kwargs):
        self.timeout = int(kwargs.pop('timeout', '60'))
        super(QuotesSpider, self).__init__(*args, **kwargs)

    def start_requests(self):
        from twisted.internet import reactor
        reactor.callLater(self.timeout, self.stop)

        urls = ['http://quotes.toscrape.com/page/1']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {'text': quote.css('span.text::text').get()}

    def stop(self):
        self.crawler.engine.close_spider(self, 'timeout')

Значение по умолчанию для параметра TWISTED_REACTORNone, что означает, что Scrapy не будет пытаться установить какой-либо конкретный реактор, и будет использоваться реактор по умолчанию, определенный Twisted для текущей платформы. Это сделано для поддержания обратной совместимости и избежания возможных проблем, вызванных использованием нестандартного реактора.

Для получения дополнительной информации см. выбор интеграции Reactor и GUI Toolkit.

URLLENGTH_LIMIT

По умолчанию: 2083

Область применения: spidermiddlewares.urllength

Максимальная длина URL-адреса для просканированных URL-адресов.

Данный параметр может действовать как условие остановки в случае URL-адресов постоянно увеличивающейся длины, что может быть вызвано, например, ошибкой программирования на целевом сервере или в вашем коде. См. также REDIRECT_MAX_TIMES и DEPTH_LIMIT.

Используйте 0, чтобы разрешить URL-адреса любой длины.

Значение по умолчанию скопировано из максимальной длины URL Microsoft Internet Explorer, хотя данный параметр существует по разным причинам.

USER_AGENT

По умолчанию: "Scrapy/VERSION (+https://scrapy.org)"

Значение по умолчанию User-Agent для использования при сканировании, если оно не отменено. Данный пользовательский агент также используется RobotsTxtMiddleware, если для параметра ROBOTSTXT_USER_AGENT установлено значение None и для запроса не указан заголовок User-Agent.

Настройки задокументированы в другом месте:

Следующие настройки задокументированы в другом месте, пожалуйста, проверьте каждый конкретный случай, чтобы узнать, как их включить и использовать.