Telnet 控制台

Scrapy 内置了一个 telnet 控制台,用于检查和控制正在运行的 Scrapy 进程。telnet 控制台只是运行在 Scrapy 进程内部的一个普通 python shell,因此您可以在其中执行任何操作。

telnet 控制台是一个内置的 Scrapy 扩展,默认启用,但您也可以根据需要禁用它。有关此扩展本身的更多信息,请参阅Telnet 控制台扩展

警告

通过公共网络使用 telnet 控制台是不安全的,因为 telnet 不提供任何传输层安全性。即使有用户名/密码认证也无法改变这一点。

预期用途是本地连接到正在运行的 Scrapy 爬虫(爬虫进程和 telnet 客户端在同一台机器上)或通过安全连接(VPN、SSH 隧道)。请避免通过不安全的连接使用 telnet 控制台,或者通过使用 TELNETCONSOLE_ENABLED 选项完全禁用它。

如何访问 telnet 控制台

telnet 控制台侦听在 TELNETCONSOLE_PORT 设置中定义的 TCP 端口,默认为 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_USERNAMETELNETCONSOLE_PASSWORD 进行覆盖。

警告

用户名和密码只提供有限的保护,因为 telnet 不使用安全传输 - 即使设置了用户名和密码,流量默认也是未加密的。

您需要 telnet 程序,它在 Windows 和大多数 Linux 发行版中默认安装。

telnet 控制台中可用的变量

telnet 控制台就像运行在 Scrapy 进程内部的一个普通 Python shell,因此您可以在其中执行任何操作,包括导入新模块等。

然而,telnet 控制台提供了一些为方便起见而定义的默认变量

快捷方式

描述

crawler

Scrapy Crawler (scrapy.crawler.Crawler 对象)

engine

Crawler.engine 属性

spider

当前活跃的爬虫

extensions

扩展管理器 (Crawler.extensions 属性)

stats

统计信息收集器 (Crawler.stats 属性)

settings

Scrapy 设置对象 (Crawler.settings 属性)

est

打印引擎状态报告

prefs

用于内存调试 (参见 调试内存泄漏)

p

pprint.pprint() 函数的快捷方式

hpy

用于内存调试 (参见 调试内存泄漏)

telnet 控制台使用示例

以下是一些可以使用 telnet 控制台完成的示例任务

查看引擎状态

您可以使用 Scrapy 引擎的 est() 方法通过 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 本地命名空间中可用的变量。为此,您需要在处理程序中更新 telnet_vars dict。

参数:

telnet_vars (dict) – telnet 变量的字典

Telnet 设置

这些设置控制 telnet 控制台的行为

TELNETCONSOLE_PORT

默认值: [6023, 6073]

telnet 控制台使用的端口范围。如果设置为 None,则使用动态分配的端口。

TELNETCONSOLE_HOST

默认值: '127.0.0.1'

telnet 控制台应该监听的接口

TELNETCONSOLE_USERNAME

默认值: 'scrapy'

用于 telnet 控制台的用户名

TELNETCONSOLE_PASSWORD

默认值: None

用于 telnet 控制台的密码,默认行为是自动生成