scrapyd支持的API 介绍
scrapyd支持一系列api,下面用一个py文件来介绍
# -*- coding: utf-8 -*-
import json
baseUrl = ' http://127.0.0.1:6800/ '
daemUrl = ' http://127.0.0.1:6800/daemonstatus.json '
listproUrl = ' http://127.0.0.1:6800/listprojects.json '
listspdUrl = ' http://127.0.0.1:6800/listspiders.json?project=%s '
listspdvUrl= ' http://127.0.0.1:6800/listversions.json?project=%s '
listjobUrl = ' http://127.0.0.1:6800/listjobs.json?project=%s '
delspdvUrl= ' http://127.0.0.1:6800/delversion.json '
# http://127.0.0.1:6800/daemonstatus.json
#查看scrapyd服务器运行状态
r= requests.get(daemUrl)
print ' 1.stats :\n %s \n\n ' %r.text
# http://127.0.0.1:6800/listprojects.json
#获取scrapyd服务器上已经发布的工程列表
r= requests.get(listproUrl)
print ' 1.1.listprojects : [%s]\n\n ' %r.text
if len(json.loads(r.text)[ " projects "])>0 :
project = json.loads(r.text)[ " projects "][0]
# http://127.0.0.1:6800/listspiders.json?project=myproject
#获取scrapyd服务器上名为myproject的工程下的爬虫清单
listspd=listspd % project
r= requests.get(listspdUrl)
print ' 2.listspiders : [%s]\n\n ' %r.text
if json.loads(r.text).has_key( " spiders ")>0 :
spider =json.loads(r.text)[ " spiders "][0]
# http://127.0.0.1:6800/listversions.json?project=myproject
# #获取scrapyd服务器上名为myproject的工程下的各爬虫的版本
listspdvUrl=listspdvUrl % project
r = requests.get(listspdvUrl)
print ' 3.listversions : [%s]\n\n ' %rtext
if len(json.loads(r.text)[ " versions "])>0 :
version = json.loads(r.text)[ " versions "][0]
# http://127.0.0.1:6800/listjobs.json?project=myproject
#获取scrapyd服务器上的所有任务清单,包括已结束,正在运行的,准备启动的。
listjobUrl=listjobUrl % proName
r=requests.get(listjobUrl)
print ' 4.listjobs : [%s]\n\n ' %r.text
# schedule.json
# http://127.0.0.1:6800/schedule.json -d project=myproject -d spider=myspider
#启动 scrapyd服务器上myproject工程下的myspider爬虫,使myspider立刻开始运行 ,注意必须以post方式
schUrl = baseurl + ' schedule.json '
dictdata ={ " project ":project, " spider ":spider}
r= reqeusts.post(schUrl, json= dictdata)
print ' 5.1.delversion : [%s]\n\n ' %r.text
# http://127.0.0.1:6800/delversion.json -d project=myproject -d version=r99'
#删除scrapyd服务器上myproject的工程下的版本名为version的爬虫 ,注意必须以post方式
delverUrl = baseurl + ' delversion.json '
dictdata={ " project ":project , " version ": version }
r= reqeusts.post(delverUrl, json= dictdata)
print ' 6.1.delversion : [%s]\n\n ' %r.text
# http://127.0.0.1:6800/delproject.json -d project=myproject
#删除scrapyd服务器上myproject工程,注意该命令会自动删除该工程下所有的spider,注意必须以post方式
delProUrl = baseurl + ' delproject.json '
dictdata={ " project ":project }
r= reqeusts.post(delverUrl, json= dictdata)
print ' 6.2.delproject : [%s]\n\n ' %r.text
总结一下:
http://127.0.0.1:6800/listprojects.json
6、启动服务器上某一爬虫(必须是已发布到服务器的爬虫)
http://localhost:6800/schedule.json (post方式,data={ " project " :myproject, " spider " :myspider})
这里可以看到,有删除爬虫的APi,有启动爬虫的API,独独没有发布爬虫的API,为什么呢?
因为发布爬虫需要使用另一个专用工具Scrapyd-client。
五、发布爬虫的工具Scrapyd-client
Scrapyd-client是一个专门用来发布scrapy爬虫的工具,安装该程序之后会自动在c:\python\scripts安装一个名为scrapyd-deploy的工具(其实打开该文件,可以发现它是一个类似setup.py的python脚本,所以可以通过python scrapyd-deploy的方式运行)。
1、安装方法
……
C:\Python27\Scripts> dir sc*
驱动器 C 中的卷是 Windows
卷的序列号是 9C3D-C0EC
C:\Python27\Scripts 的目录
2016-06-29 11:19 313 scrapy-script.py
2016-06-29 11:19 74,752 scrapy.exe
2016-06-29 09:10 9,282 scrapyd-deploy
2016-06-29 11:19 318 scrapyd-script.py
2016-06-29 11:19 74,752 scrapyd.exe
5 个文件 159,417 字节
2、运行方法
1)、拷贝scrapyd-deploy工具到爬虫目录下
驱动器 D 中的卷没有标签。
卷的序列号是 36D9-CDC7
D:\python\Spider-master\ccpmess 的目录
2016-07-01 23:52 < DIR> .
2016-07-01 23:52 < DIR> ..
2016-06-30 13:52 < DIR> ccpmess
2016-06-30 13:37 662 ccpmess-main.py
2016-06-30 13:53 1,022 ccpmess.wpr
2016-07-01 14:52 78,258 ccpmess.wpu
2016-06-30 14:07 324 scrapy.cfg
2016-06-29 09:10 9,282 scrapyd-deploy
2)修改爬虫的scapy.cfg文件
首先去掉url前的注释符号,这里url就是你的scrapyd服务器的网址。
其次,deploy:127表示把爬虫发布到名为127的爬虫服务器上。
这个名叫target名字可以随意起,一般情况用在需要同时发布爬虫到多个目标服务器时,可以通过指定名字的方式发布到指定服务器。
其次,default=ccpmess.settings 中 ccpmess也是可以改的,貌似没啥用,默认还是用工程名字。
关键是scrapyd-deploy 所在目录,具体其实可以读下scrapyd-deploy 的代码。
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.org/en/latest/deploy.html
[settings]
default = ccpmess.settings
[deploy:127]
url = http://127.0.0.1:6800/
project = ccpmess
[deploy:141]
url = http://138.0.0.141:6800/
project = ccpmess
3)查看配置
检查scrapy配置是否正确。
141 http://138.20.1.141:6800/
127 http://127.0.0.1:6800/
4)发布爬虫
scrapyd-deploy <target> -p <project> --version <version>
target就是前面配置文件里deploy后面的的target名字。
project 可以随意定义,跟爬虫的工程名字无关。
version自定义版本号,不写的话默认为当前时间戳。
注意,爬虫目录下不要放无关的py文件,放无关的py文件会导致发布失败,但是当爬虫发布成功后,会在当前目录生成一个setup.py文件,可以删除掉。
Packing version ver20160702
Deploying to project "projectccp" in http://127.0.0.1:6800/addversion.json
Server response (200):
{"status": "ok", "project": "projectccp", "version": "ver20160702", "spiders": 1, "node_name": "compter……"}
到此,基于scrapyd的爬虫发布教程就写完了。
可能有人会说,我直接用scrapy cwal 命令也可以执行爬虫,个人理解用scrapyd服务器管理爬虫,至少有以下几个优势:
1、可以避免爬虫源码被看到。
2、有版本控制。
3、可以远程启动、停止、删除,正是因为这一点,所以scrapyd也是分布式爬虫的解决方案之一。