Lzh on GitHub

Telnet Console (Telnet 控制台)

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

telnet 控制台是一个内置的 Scrapy 扩展,默认情况下启用,但如果您愿意,也可以禁用它。有关扩展本身的更多信息,请参阅Telnet 控制台扩展

警告

通过公共网络使用 telnet 控制台是不安全的,因为 telnet 不提供任何传输层安全性。拥有用户名/密码身份验证并不能改变这一点。

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

How to access the telnet console (如何访问 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 发行版中默认安装。

Available variables in the telnet console (telnet 控制台中可用的变量)

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

但是,telnet 控制台默认定义了一些变量以方便使用:

快捷方式描述
crawlerScrapy Crawler (scrapy.crawler.Crawler 对象)
engineCrawler.engine 属性
spider活动的爬虫
extensions扩展管理器 (Crawler.extensions 属性)
stats统计数据收集器 (Crawler.stats 属性)
settingsScrapy 设置对象 (Crawler.settings 属性)
est打印引擎状态报告
prefs用于内存调试(参见调试内存泄漏
ppprint.pprint() 函数的快捷方式
hpy用于内存调试(参见调试内存泄漏

Telnet console usage examples (Telnet 控制台使用示例)

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

View engine status (查看引擎状态)

您可以使用 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

Pause, resume and stop the Scrapy engine (暂停、恢复和停止 Scrapy 引擎)

暂停:

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

恢复:

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

停止:

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

Telnet Console signals (Telnet 控制台信号)

scrapy.extensions.telnet.update_telnet_vars(telnet_vars)

在 telnet 控制台打开之前发送。您可以连接到此信号以添加、删除或更新 telnet 局部命名空间中可用的变量。为此,您需要更新处理程序中的 telnet_vars 字典。

参数:

  • telnet_vars (dict) – telnet 变量的字典

Telnet settings (Telnet 设置)

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

TELNETCONSOLE_PORT

默认值:[6023, 6073] 用于 telnet 控制台的端口范围。如果设置为 None,则使用动态分配的端口。

TELNETCONSOLE_HOST

默认值:'127.0.0.1' telnet 控制台应侦听的接口。

TELNETCONSOLE_USERNAME

默认值:'scrapy' 用于 telnet 控制台的用户名。

TELNETCONSOLE_PASSWORD

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