Настройки
Параметры Scrapy позволяют настраивать поведение всех компонентов Scrapy, включая ядро, расширения, конвейеры и сами пауки.
Инфраструктура параметров обеспечивает глобальное пространство имён сопоставлений «ключ-значение», которое код может использовать для извлечения значений конфигурации. Параметры могут быть заполнены с помощью различных механизмов, которые описаны ниже.
Настройки также являются механизмом выбора текущего активного проекта Scrapy (если у вас их много).
Список доступных встроенных настроек см .: Справочник по встроенным настройкам.
Обозначение настроек
Когда вы используете Scrapy, вы должны указать ему, какие настройки вы используете. Вы можете сделать это с помощью переменной среды SCRAPY_SETTINGS_MODULE
.
Значение SCRAPY_SETTINGS_MODULE
должно быть в синтаксисе пути Python, например myproject.settings
. Обратите внимание, что модуль настроек должен быть Python путём поиска импортов.
Заполнение настроек
Параметры могут быть заполнены с помощью различных механизмов, каждый из которых имеет разный приоритет. Вот их список в порядке убывания приоритета:
Параметры командной строки (высший приоритет)
Настройки для паука
Модуль настроек проекта
Настройки по умолчанию для каждой команды
Глобальные настройки по умолчанию (без приоритета)
О заполнении данных источников настроек заботятся внутренние, но возможна ручная обработка с использованием вызовов 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'
: соответствует OpenSSLTLS_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:
Устанавливает
Twisted[http2]>=17.9.0
, чтобы установить пакеты, необходимые для включения поддержки HTTP/2 в Twisted.Обновляет
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_REACTOR
— None
, что означает, что 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.
Настройки задокументированы в другом месте:
Следующие настройки задокументированы в другом месте, пожалуйста, проверьте каждый конкретный случай, чтобы узнать, как их включить и использовать.