当前位置:嗨网首页>书籍在线阅读

04-分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.2.1 分析

使用这些设置,你可以配置Scrapy,使其通过日志、统计和Telnet工具提供性能和调试信息。

1.日志

Scrapy基于严重程度,拥有不同的日志等级: DEBUG (最低等级)、 INFOWARNINGERRORCRITICAL (最高等级)。除此之外,还有一个 SILENT 等级,使用它将不记录任何日志。通过将 LOG_LEVEL 设置为希望日志记录的最低级别,可以限制日志文件只接受指定等级以上的日志。我们一般将该值设为 INFO ,因为 DEBUG 级别过于详细。一个非常有用的Scrapy扩展是Log Stats扩展,该扩展会打印出每分钟抓取的item和页面的数量。日志频率使用 LOGSTATS_INTERVAL 进行设置,其默认值为60秒。该设置的频率过低,所以在我开发时,会将该值设置为5秒,因为大多数运行都很短暂。写入日志的文件可以通过 LOG_FILE 设置。除非将 LOG_ENABLED 的值设置为 False 进行显式禁用,否则日志将会输出到标准错误当中。最后,可以通过设置 LOG_STDOUTTrue ,告知Scrapy将所有标准输出(比如:"print"消息)写入日志。

2.统计

STATS_DUMP 默认是开启的,它会在爬虫结束运行时,将统计信息收集器中的值转存到日志当中。可以通过将 DOWNLOADER_STATS 设置为 False ,控制是否为下载记录统计信息。还可以通过 DEPTH_STATS 设置,控制是否收集站点深度的统计信息。要想了解有关深度的更多细节,可以将 DEPTH_STATS_VERBOSE 设为 TrueSTATSMAILER_RCPTS 是一个邮件列表(比如设置为 ['[email protected]'] ),当爬取完成时,会向该列表中的邮箱发送邮件。无需经常调整这些设置,不过它们偶尔会在调试时帮助到你。

3.Telnet

Scrapy包含一个内置的Telnet控制台,可以为你提供正在运行中的Scrapy进程的Python shell。 TELNETCONSOLE_ENABLED 默认情况下是开启的,而 TELNETCONSOLE_PORT 决定了连接到控制台的端口。你可能需要修改该值,以防止端口冲突。

示例1——使用Telnet

在某些情况下,需要查看正在运行的Scrapy的内部状态。下面让我们看看如何使用Telnet控制台完成该操作。

本章代码位于 `ch07` 目录中。其中,本示例在 `ch07/properties` 目录中。
$ pwd
/root/book/ch07/properties
$ ls
properties scrapy.cfg

使用如下命令开始爬取。

$ scrapy crawl fast
...
[scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023:6023

上面的消息意味着Telnet已经被激活,并且使用6023端口进行监听。现在,可以在另一个终端中,使用telnet命令连接它。

$ telnet localhost 6023
>>>

此时,该控制台会提供一个Scrapy内部的Python控制台。你可以查看某些组件,比如使用 engine 变量查看引擎,不过为了能够更快地了解状态概况,可以使用 est() 命令。

>>> est()
Execution engine status
time()-engine.start_time      : 5.73892092705
engine.has_capacity()        : False
len(engine.downloader.active)    : 8
...
len(engine.slot.inprogress)     : 10
...
len(engine.scraper.slot.active)   : 2

第10章将会探讨其中的一些度量标准。此时将发现你依然是在Scrapy引擎内部运行它。假设使用了如下命令:

>>> import time
>>> time.sleep(1) # Don't do this!

此时,你会发现在另一个终端中会出现短暂的暂停。显然,该控制台不是用来计算Pi值前100万位的合适地点。你可以在该控制台中操作的事情还包括暂停、继续和终止爬取。你可能会发现,在远程机器操作Scrapy会话时,这些事情和终端通常都很有用。

>>> engine.pause()
>>> engine.unpause()
>>> engine.stop()
Connection closed by foreign host.