Telnet 控制台

Scrapy 带有一个内置的 Telnet 控制台,用于检查和控制正在运行的 Scrapy 进程。Telnet 控制台只是 Scrapy 进程内部运行的一个普通 Python shell,因此您几乎可以通过它做任何事情。

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

警告

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

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

注意

TWISTED_REACTOR_ENABLED 设置为 False 时,不支持此功能。

另请参阅

Telnet 控制台

如何访问 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

当前活跃的爬虫

extensions

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

stats

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

settings

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

est

打印引擎状态报告

prefs

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

p

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

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 控制台应监听的接口

另请参阅

Telnet 控制台

TELNETCONSOLE_USERNAME

默认值: 'scrapy'

Telnet 控制台使用的用户名

TELNETCONSOLE_PASSWORD

默认值:None

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