笔记-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

笔记-scrapy-scarpyd的更多相关文章

  1. 笔记-scrapy与twisted

    笔记-scrapy与twisted Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码. 在任何情况下,都不要写阻塞的代码.阻塞的代码包括: ...

  2. Scrapy 初体验

    开发笔记 Scrapy 初体验 scrapy startproject project_name 创建工程 scrapy genspider -t basic spider_name website. ...

  3. Python Scrapy环境配置教程+使用Scrapy爬取李毅吧内容

    Python爬虫框架Scrapy Scrapy框架 1.Scrapy框架安装 直接通过这里安装scrapy会提示报错: error: Microsoft Visual C++ 14.0 is requ ...

  4. python数据类

    前言 之前有写过一篇python元类的笔记,元类主要作用就是在要创建的类中使用参数metaclass=YourMetaclass调用自定义的元类,这样就可以为所有调用了这个元类的类添加相同的属性了. ...

  5. python内置装饰器

    前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...

  6. scrapy-redis debug视频

    前言 在上一篇笔记说过会录个视频帮助理解里面的类方法,现在视频来了.只录了debug scheduler.py里面的类方法,还有spiders.py里面的类方法差不多,就不说了,自己动手丰衣足食.限于 ...

  7. scrapy-redis源码浅析

    原文链接 前言 分析这个项目的源码原因是需要有去重过滤,增量爬取两个功能,而scrapy-redis项目已经帮我们实现了,想看看他是怎么实现的.这里只贴出部分主要代码,查看时请打开源码对照,笔记有点长 ...

  8. scrapy爬虫笔记(一)------环境配置

    前言: 本系列文章是对爬虫的简单介绍,以及教你如何用简单的方法爬取网站上的内容. 需要阅读者对html语言及python语言有基本的了解. (本系列文章也是我在学习爬虫过程中的学习笔记,随着学习的深入 ...

  9. Learning Scrapy笔记(六)- Scrapy处理JSON API和AJAX页面

    摘要:介绍了使用Scrapy处理JSON API和AJAX页面的方法 有时候,你会发现你要爬取的页面并不存在HTML源码,譬如,在浏览器打开http://localhost:9312/static/, ...

  10. Learning Scrapy笔记(零) - 前言

    我已经使用了scrapy有半年之多,但是却一直都感觉没有入门,网上关于scrapy的文章简直少得可怜,而官网上的文档(http://doc.scrapy.org/en/1.0/index.html)对 ...

随机推荐

  1. The fourteenth day

    A man is not old as long as he is seeking something. A man is not old until regrets take the place o ...

  2. The fool doth think he is wise, but the wise man knows himself to be a fool.

    The fool doth think he is wise, but the wise man knows himself to be a fool.愚者总自以为聪明,智者则有自知之明.

  3. Annotation版本的HelloWorld

    hiberante 的 annotation历史: 在hibernate3以后,开始支持Annotation; 先有hiberante再有JPA,有了JPA标准之后,hibernate写了Annota ...

  4. ansible使用9-Playbooks: Special Topics

    Accelerated Mode port 5099 持续连接30min --- - hosts: all accelerate: true tasks: - name: some task comm ...

  5. 最近项目需要用到AdminLTE,所以整理一份中文版的小教程

    先介绍一下AdminLTE的官方网站:AdminLTE官方网站 和GitHub:AdminLTE的github,可以在上面自行下载. AdminLTE 是一个完全响应管理模板,主要依赖于 Bootst ...

  6. CentOS6下DHCP服务(二)简单配置案例及故障排查

    1.预分配网络参数如下:linux服务器:eth0 IP为192.168.8.250  做为局域网DHCP服务器局域网网段设置为192.168.8.0/24:内部计算机的router为192.168. ...

  7. Python基础学习之变量赋值

    1.赋值操作符 Python语言中,等号(=)是主要的赋值操作符: >>> aInt=-100 >>> aString='this is a string' > ...

  8. ASP.NET Core - VSCode安装和配置

    在深入了解ASP.NET Core之前先研究了下主要的两个开发工具(VS 2015和VS Code), VS 2015对Core的支持已经相当的完备,很多操作得到简化用起来很是方便.VS Code是微 ...

  9. Sublime Text3 + Markdown + 实时预览

    Sublime Text3是一款给力的文本编辑器,通过安装插件可以编辑Markdown文本,在编辑Markdown文本的同时可以实时预览编辑效果. 安装准备: 找到菜单栏:Preferences → ...

  10. ABAP Netweaver和Hybris里获得内存使用统计数据

    ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟,Hybris Administration console会发起一个到Java后台的AJAX查询请求: 这个5秒的时间间隔定义在 ...