Настройки¶
Параметры 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 = ['user@example.com']
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 = ['user@example.com']
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.
Настройки задокументированы в другом месте:¶
Следующие настройки задокументированы в другом месте, пожалуйста, проверьте каждый конкретный случай, чтобы узнать, как их включить и использовать.