Analysis:
通过修改这些设置项,可以配置Scrapy通过logs、statistics和telnet来提供性能和调试信息的方式。
- Logging:根据严重程度的不同,Scrapy有几种级别的日志:
DEBUG
(最低级别)、INFO
、WARNING
、ERROR
和CRITICAL
(最高级别)。除此之外还有一个SILENT
级别,这个级别不会有任何日志输出。把LOG_LEVEL
设置成某个级别,然后就可以只接收这个级别及以上的日志输出。通常情况下都会把这个选项设置成INFO
,因为DEBUG
级别的输出太冗多。Scrapy有个扩展是Log Stats
扩展,它会打印出每分钟抓取的Item
和网页的数目。打印的频率由LOGSTATS_INTERVAL
控制,默认值为60s(即为每分钟的抓取数目),在实际应用中,由于很多爬虫的运行时间都很短,可以视情况而定来设置这个值。日志输出会被写入LOG_FILE
设置的文件中。除非设置了这个值而且把LOG_ENABLED
的值设置成了False
,否则日志都会被输出到标准错误中。最后,如果需要把Scrapy中的标准输出(比如print
语句)也记录到日志文件中去,可以把LOG_STDOUT
设置成True
。 Stats:
STATS_DUMP
默认情况下是启用的,它负责在爬虫运行完之后把统计数据从Stats Collector
输出到日志 。把DOWNLOADER_STATS
设置成False
可以不记录下载器的数据。同样地,设置DEPTH_STATS
选项可以控制是否收集站点深度的数据。如果在站点深度上需要更加详尽的信息可以把DEPTH_STATS_VERBOSE
设置成True
。STATSMAILER_RCPTS
是一个邮件地址列表,例如可以设置成[my@mail.com]
,当爬虫运行完毕时可以向这些地址发送统计信息。这些设置可能不会经常改动,但是它们有时对调试爬虫是非常有用的。Telnet:Scrapy有一个内建的telnet控制台,这个控制台提供了一个Python shell,可以在上面运行Scrapy程序。
TELNETCONSOLE_ENABLED
默认情况下是启用的。TELNETCONSOLE_PORT
选项设置了联系控制台的端口,有时需要重新设置以防冲突。例子-使用Telnet:
有些情况下你可能需要在爬虫运行时查看它的内部状态,来看一下如何用Telnet做到这一点:$ 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 shell。在这里可以检查许多组件,例如可以用
engine
变量来检查引擎,但是如果是为了很快地能了解程序目前的状态的话,可以使用est()
命令:>>> est() Execution engine status time()-engine.start_time : 5.73892092705 engine.has_capacity() : False len(engine.downloader.active) : 8 ... len(engine.slot.improgress) : 10 ... len(engine.scraper.slot.active) : 2
要注意的是,你是在Scrapy引擎里运行这些命令的,假设你运行了以下命令:
>>> import time >>> time.sleep(1) #Don't do this!
这时你会发现在另外的运行Scrapy程序的终端出现了一个短暂的停顿。在telnet控制台中,可以控制爬虫程序的暂停、继续和停止:
>>> engine.pause() >>> engine.unpause() >>> engine.stop() Connection closed by foreign host.