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 爬虫 (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 控制台执行的示例任务

查看引擎状态

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

参数:

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 控制台的密码,默认行为是自动生成它