Scrapy提供用于监控及控制运行中的爬虫的web服务(service)。 服务通过 JSON-RPC 2.0 协议提供大部分的资源,不过也有些(只读)资源仅仅输出JSON数据。
Scrapy为管理Scrapy进程提供了一个可扩展的web服务。 您可以通过 WEBSERVICE_ENABLED
来启用服务。 服务将会监听 WEBSERVICE_PORT
的端口,并将记录写入到 WEBSERVICE_LOGFILE
指定的文件中。
web服务是默认启用的 内置Scrapy扩展 <topics-extensions-ref>
, 不过如果您运行的环境内存紧张的话,也可以关闭该扩展。
web service提供多种资源,定义在 WEBSERVICE_RESOURCES
设置中。 每个资源提供了不同的功能。参考 topics-webservice-resources-ref
来查看默认可用的资源。
虽然您可以使用任何协议来实现您的资源,但有两种资源是和Scrapy绑定的:
- Simple JSON resources - 只读,输出JSON数据
- JSON-RPC resources - 通过使用 JSON-RPC 2.0 协议支持对一些Scrapy对象的直接访问
scrapy.contrib.webservice
Scrapy默认支持以下JSON-RPC资源:
scrapy.contrib.webservice.crawler
提供对主Crawler对象的访问,来控制Scrapy进程。
默认访问地址: http://localhost:6080/crawler
scrapy.contrib.webservice.stats
提供对crawler使用的状态收集器(Stats Collector)的访问。
默认访问地址: http://localhost:6080/stats
您可以通过 topics-webservice-crawler
来访问 爬虫管理器JSON-RPC资源。地址为: http://localhost:6080/crawler/spiders
您可以通过 topics-webservice-crawler
来访问 扩展管理器JSON-RPC资源。地址为:
Scrapy默认提供下列JSON资源:
scrapy.contrib.webservice.enginestatus
提供了对引擎状态数据的访问
您可以通过下列选项来设置web服务:
WEBSERVICE_ENABLED
Default: True
布尔值。确定web服务是否启用(以及说该扩展是否启用)。
WEBSERVICE_LOGFILE
Default: None
记录对该web服务的http请求的文件。如果未设置,则记录将写到标准scrapy的log中。
WEBSERVICE_PORT
Default: [6080, 7030]
web服务的端口范围。如果设置为 None
或 0
,则使用动态分配的端口。
WEBSERVICE_HOST
Default: '127.0.0.1'
web服务监听的接口(interface)
Default: {}
您的项目所启用的web服务资源的列表(list)。请参考 topics-webservice-resources
。该列表将会添加/覆盖 WEBSERVICE_RESOURCES_BASE
中定义的Scrpay默认启用的资源的值。
Default:
{
'scrapy.contrib.webservice.crawler.CrawlerResource': 1,
'scrapy.contrib.webservice.enginestatus.EngineStatusResource': 1,
'scrapy.contrib.webservice.stats.StatsResource': 1,
}
Scrapy默认提供的web服务资源的列表。 您不应该对您的项目修改这个设置,而是修改 WEBSERVICE_RESOURCES
。 如果您想要关闭某些资源,您可以在 WEBSERVICE_RESOURCES
设置其的值为 None
。
web服务资源的实现采用了Twisted Web API。 Twisted web及Twisted web资源的更多详情请参考 Twisted Web guide 。
编写web服务资源您需要继承 JsonResource
或 JsonRpcResource
并实现 renderGET
方法。
twisted.web.resource.Resource 的子类,实现了一个JSON web服务资源。参考
ws_name
Scrapy web服务的名字,同时也是该资源监听的路径。举个例子, 假设Scrapy web服务监听 http://localhost:6080/ ,ws_name
是 'resource1'
,则该资源的URL为:
JsonResource
的子类,实现了JSON-RPC资源。 JSON-RPC资源为Python(Scrapy)对象做了一层JSON-RPC API封装。 被封装的资源必须通过 get_target
方法返回。该方法默认返回构造器传入的目标(target)。
get_target()
返回JSON-RPC所封装的对象。默认情况下,返回构造器传入的对象。
src_used/stats.py
src_used/enginestatus.py
src_used/scrapy-ws.py