笔记-scrapy-scarpyd
1. scrapy部署
会写爬虫之后就是部署、管理爬虫了,下面讲一下如何部署scrapy爬虫。
现在使用较多的管理工具是Scrapyd。
scrapyd是一个爬虫管理服务器,在需要部署爬虫的服务器上安装。
2. scrapyd
2.1. 体系/原理
以向10台服务器部署爬虫为例,设A为操作端/发布端,则其余9台为爬虫运行端,操作端负责将爬虫发布到运行端和远程管理爬虫的运行,停止,删除。
运行端则接受操作端的命令,部署、运行爬虫。
操作端需要scrapyd-client,运行端需要安装scrapyd并处于运行状态。
实际上面两个部件以前是一体的,后来进行了分离。
下面先讲scrapyd。
2.2. scrapyd安装
pip install scrapyd
安装版本为1.2.0
2.3. 使用
启动scrapyd服务:
scrapyd # 启动服务,端口号 6800
停止scrapyd的服务:
Control + C
图形界面:
打开浏览器,192.168.xx.xx:6800,界面如下:
在这里可以查看当前任务及日志。
2.4. 配置及其它问题
- 本地浏览器访问成功,远程访问不了。
默认bind绑定的ip地址是127.0.0.1端口是6800,这里为了其他主机可以访问,需将ip地址设置为0.0.0.0。
需要到配置文件中修改,找到site-packages/scrapyd/default_scrapyd.conf
将bind_address = 127.0.0.1修改为0.0.0.0
2.5. scrapyd支持的API 介绍
scrapyd支持一系列api,下面用一个py文件来介绍
# -*- coding: utf-8 -*-
import requests
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
接口命令总结:
1、获取状态
http://127.0.0.1:6800/daemonstatus.json
2、获取项目列表
http://127.0.0.1:6800/listprojects.json
3、获取项目下已发布的爬虫列表
http://127.0.0.1:6800/listspiders.json?project=myproject
4、获取项目下已发布的爬虫版本列表
http://127.0.0.1:6800/listversions.json?project=myproject
5、获取爬虫运行状态
http://127.0.0.1:6800/listjobs.json?project=myproject
6、启动服务器上某一爬虫(必须是已发布到服务器的爬虫)
http://localhost:6800/schedule.json (post方式,data={"project":myproject,"spider":myspider})
7、删除某一版本爬虫
http://127.0.0.1:6800/delversion.json (post方式,data={"project":myproject,"version":myversion})
8、删除某一工程,包括该工程下的各版本爬虫
http://127.0.0.1:6800/delproject.json(post方式,data={"project":myproject})
3. scrapyd-client
scrapyd-client是一个负责发布爬虫的包,需要安装。
3.1. install
pip install scrapyd-client
3.2. 部署爬虫
准备工作:
切换到需要部署的scrapy项目目录下,在此进行设置和打开命令行进行部署
创建爬虫项目之后,下面会有个配置文件scrapy.cfg,打开,配置如下。
# 1. scrapyd的配置名
[deploy:scrapy_Tencent] #scrapy_ +项目名
配置名默认为空,但强烈建议取一个。
# 2. 启动scrapyd服务的远程主机ip,localhost默认本机的
url = http://localhost:6800/
#url = http:192.168.xx.xxx:6800 # 服务器的IP
#- 3.项目名称
project = Tencent
上面的配置可以写很多份,发布到不同的scrapyd服务器上。
将scrapy项目部署到scrapyd上
# -p 执行项目名,将Tencent按指定的配置信息部署到scrapyd
scrapyd-deploy shu1 -p shuhuang
3.3. 爬虫开始执行及管理
1.启动项目下指定的爬虫
curl http://localhost:6800/schedule.json -d project=shuhuang -d spider=book
{"status": "ok", "jobid": "2f240b1171bc11e7ae5aa45e60e36247", "node_name": "PowerMac.local"}
这时会在启动scrapyd的界面下看到输出。
2.停止项目下指定的爬虫(启动之后会给出jobid,停止爬虫时需要这个值)
curl http://localhost:6800/cancel.json -d project=shuhuang job=2f240b1171bc11e7ae5aa45e60e36247
关于更多的命令参数参考前文。
4. 总结
scrapyd是一个爬虫服务器,负责管理爬虫,它开放一个HTTP服务用于接收命令并对爬虫进行操作;
scrapyd-client用于连接发布爬虫到
5. 附录
5.1. curl
很多教程中都使用curl命令,它是什么?
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具。
cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
在这里使用时相当于请求构造,get,post;
可以查看scrapyd文档api部分,每个接口下列出了请求方法
- Supported Request Methods: POST
curl安装方法:
centos 下yum install curl