Консоль Telnet

Scrapy поставляется со встроенной консолью telnet для проверки и управления запущенным процессом Scrapy. Консоль telnet — это обычная оболочка Python, работающая внутри процесса Scrapy, так что вы можете делать с её помощью буквально все, что угодно.

Консоль telnet — это встроенное расширение Scrapy, которая включена по умолчанию, но вы также можете отключить её, если хотите. Для получения дополнительной информации о самом расширении см. Расширение консоли Telnet.

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

Использование консоли telnet в общедоступных сетях небезопасно, поскольку telnet не обеспечивает безопасность на транспортном уровне. Наличие аутентификации по имени пользователя и паролю этого не меняет.

Предполагаемое использование — подключение к работающему пауку Scrapy локально (процесс паука и клиент telnet находятся на одном компьютере) или через безопасное соединение (VPN, туннель SSH). Избегайте использования консоли telnet при незащищенных соединениях или полностью отключает её с помощью параметра TELNETCONSOLE_ENABLED.

Как получить доступ к консоли telnet

Консоль telnet прослушивает порт TCP, определенный в настройке TELNETCONSOLE_PORT, которая по умолчанию имеет значение 6023. Чтобы получить доступ к консоли, вам необходимо ввести:

telnet localhost 6023
Trying localhost...
Connected to localhost.
Escape character is '^]'.
Username:
Password:
>>>

По умолчанию имя пользователя — scrapy, а пароль создаётся автоматически. Автоматически сгенерированный пароль можно увидеть в журналах Scrapy, как в примере ниже:

2018-10-16 14:35:21 [scrapy.extensions.telnet] INFO: Telnet Password: 16f92501e8a59326

Имя пользователя и пароль по умолчанию можно изменить с помощью настроек TELNETCONSOLE_USERNAME и TELNETCONSOLE_PASSWORD.

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

Имя пользователя и пароль обеспечивают только ограниченную защиту, поскольку telnet не использует безопасный транспорт — по умолчанию трафик не шифруется, даже если установлены имя пользователя и пароль.

Вам понадобится программа telnet, которая по умолчанию устанавливается в Windows и большинстве дистрибутивов Linux.

Доступные переменные в консоли telnet

Консоль telnet похожа на обычную оболочку Python, работающую внутри процесса Scrapy, поэтому вы можете делать с ней все, что угодно, включая импорт новых модулей и т. д.

Однако консоль telnet поставляется с некоторыми переменными по умолчанию, определенными для удобства:

Ярлык

Описание

crawler

Crawler Scrapy (объект scrapy.crawler.Crawler)

engine

Атрибут Crawler.engine

spider

активный паук

slot

слот двигателя

extensions

Менеджер расширений (атрибут Crawler.extensions)

stats

Сборщик статистики (атрибут Crawler.stats)

settings

объект настроек Scrapy (атрибут Crawler.settings)

est

распечатать отчёт о состоянии двигателя

prefs

для отладки памяти (см. Устранение утечек памяти)

p

ярлык для функции pprint.pprint()

hpy

для отладки памяти (см. Устранение утечек памяти)

Примеры использования консоли Telnet

Вот несколько примеров задач, которые вы можете выполнять с помощью консоли telnet:

Посмотреть статус двигателя

Вы можете использовать метод est() подсистемы Scrapy, чтобы быстро показать его состояние с помощью консоли telnet:

telnet localhost 6023
>>> est()
Execution engine status

time()-engine.start_time                        : 8.62972998619
len(engine.downloader.active)                   : 16
engine.scraper.is_idle()                        : False
engine.spider.name                              : followall
engine.spider_is_idle()                         : False
engine.slot.closing                             : False
len(engine.slot.inprogress)                     : 16
len(engine.slot.scheduler.dqs or [])            : 0
len(engine.slot.scheduler.mqs)                  : 92
len(engine.scraper.slot.queue)                  : 0
len(engine.scraper.slot.active)                 : 0
engine.scraper.slot.active_size                 : 0
engine.scraper.slot.itemproc_size               : 0
engine.scraper.slot.needs_backout()             : False

Приостановить, возобновить и остановить двигатель Scrapy

Чтобы сделать паузу:

telnet localhost 6023
>>> engine.pause()
>>>

Возобновить:

telnet localhost 6023
>>> engine.unpause()
>>>

Прекратить:

telnet localhost 6023
>>> engine.stop()
Connection closed by foreign host.

Сигналы консоли Telnet

scrapy.extensions.telnet.update_telnet_vars(telnet_vars)

Отправляется непосредственно перед открытием консоли telnet. Вы можете подключиться к этому сигналу, чтобы добавить, удалить или обновить переменные, которые будут доступны в локальном пространстве имён telnet. Для этого вам необходимо обновить dict telnet_vars в вашем обработчике.

Параметры

telnet_vars (dict) – словарь переменных telnet

Настройки Telnet

Это настройки, которые управляют поведением консоли telnet:

TELNETCONSOLE_PORT

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

Диапазон портов, используемых для консоли telnet. Если установлено значение None или 0, используется динамически назначаемый порт.

TELNETCONSOLE_HOST

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

Интерфейс, который должна прослушивать консоль telnet

TELNETCONSOLE_USERNAME

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

Имя пользователя, используемое для консоли telnet

TELNETCONSOLE_PASSWORD

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

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