笔记-scrapy-scarpyd

笔记-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.    配置及其它问题

  1. 本地浏览器访问成功,远程访问不了。

默认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

 

posted @ 2018-11-18 17:36  木林森__𣛧  阅读(242)  评论(0编辑  收藏  举报