scrapyd-实际的管理爬虫程序

scrapyd 是由scrapy 官方提供的爬虫管理工具,使用它我们可以非常方便地上传、控制爬虫并且查看运行日志。

scrapyd是c/s架构

所有的爬虫调度工作全部依靠接口实现,(https://scrapyd.readthedocs.io/en/latest/api.html)

不过有直接封装好的模块scrapydWeb,可视化的查看和管理爬虫程序

scrapyd服务器:

安装:pip install scrapyd

运行:‘scrapyd’命令即可启动服务器,访问接口地址:127.0.0.1:5000(可以自行在配置文件中更改)

scrapydweb对scrapyd运行爬虫产生的日志进行了分析整理,借助了logparser模块

scrapyd服务器配置:

更改配置文件default_scrapyd.conf(所在目录C:\python\Lib\site-packages\scrapyd)

外网访问:bind_address = 0.0.0.0

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs   # 配置日志目录
items_dir   =
jobs_to_keep = 5
dbs_dir     = dbs
max_proc    = 0
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port   = 6800
debug       = off

scrapyd客户端:

安装:pip install scrapyd-client

部署scrapy 项目:

直接使用scrapyd-client提供的scrapyd-deploy工具

scrapy-client模块中有一个scrapyd-deploy文件,因为此文件只能在linux中打开,所以要自己写一个windoes的bat文件

创建scrapyd-deploy.bat文件并写入以下代码:

@echo off
"C:\Program Files\python_virtual\spider\Scripts\python.exe" "C:\Program Files\python_virtual\spider\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 %9

修改要部署项目的根目录中的 scrapy.cfg 文件

# 设置部署名称

[deploy: spider_lianjia]
# scrapyd服务器地址,如果scrapyd没有爬虫项目本地,通过这里指定scrapyd的远程地址
url = http://localhost:6800/
# 项目名称
project = lianjia

# 须要注意的是这里的用户密码并不表示访问该项目须要验证,而是登录服务器用的;没有可以不用写
# username = enlong
# password = test
 

scrapyd-deploy –l 查看当前部署的爬虫项目

发布本地项目到远程scrapyd服务器

scrapyd-deploy <host> -p <project>

host是部署scrapy的服务器,project是你的项目名称

如:

scrapyd-deploy spider_lianjia –p lianjia

发布成功后

原理:

在本地执行部署命令后,会在服务器的python目录(自动放到了安装scrapyd的python环境-site-packages)下产生两个文件eggs/dbs:其中eggs是爬虫文件的打包;运行后还会有logs文件,用来存放运行日志

不会打包需要的依赖模块,需要手动在服务器上安装

linux下:

../site-packages/scrapyd/eggs/zhilian/1574780063.egg

../site-packages/scrapyd/dbs/zhilian.db

windows下:

除非在配置文件中指明egg/dbs/logs目录,否则在执行scrapyd命令的当前目录下创建这几个文件夹

部署参考:https://blog.csdn.net/baoshuowl/article/details/79656701

不需要在服务器上对egg包做操作,直接通过scrapyd提供的接口来启动管理爬虫

scrapyd默认端口6800

如启动爬虫(必须是已发布到服务器的爬虫):
http://127.0.0.1:6800/schedule.json (post方式,data={"project":myproject,"spider":myspider})

可以对接口进行封装:

import requests

ip = "194.168.1.126"
project = "zhilian"
class Deploy:
# 获取状态
def status(self):
url = "http://{}:6800/daemonstatus.json".format(ip)
resp = requests.get(url)
print("爬虫状态")
print(resp.content.decode()) # 获取项目列表
def project_list(self):
url = "http://{}:6800/listprojects.json".format(ip)
resp = requests.get(url)
print("所有爬虫项目")
print(resp.content.decode()) # 获取项目下已发布的爬虫版本列表
def project_version(self):
url = "http://{}:6800/listversions.json?project={}".format(ip,project)
resp = requests.get(url)
print("某个爬虫项目的所有版本")
print(resp.content.decode()) # 获取爬虫运行状态
def spider_status(self):
url = "http://{}:6800/listjobs.json?project={}".format(ip,project)
resp = requests.get(url)
print("所有爬虫状态")
print(resp.content.decode()) # 启动服务器上某一爬虫
def start(self):
url = "http://{}:6800/schedule.json".format(ip)
data = {
"project": "zhilian",
"spider": "zhaopin"
}
resp = requests.post(url, data=data)
print("开启某个爬虫项目")
print(resp.content.decode()) def stop(self):
url = "http://{}:6800/cancel.json".format(ip)
# 每次启动都会有一个新的job的id
data = {
"project": "zhilian",
"job": "f55dbb54106411eab1e9dca6322820ac"
}
resp = requests.post(url, data=data)
print("停止某个爬虫项目")
print(resp.content.decode()) # 删除某一版本爬虫,["1574780063", "1574781404"],最新的在列表最后面
def delete(self,version):
url = "http://{}:6800/delversion.json".format(ip)
data = {
"project": "zhilian",
"version": version
}
resp = requests.post(url, data=data)
print("删除某个爬虫项目的某个版本")
print(resp.content.decode()) def run(self):
self.status()
self.project_list()
self.project_version()
# self.spider_status()
# self.delete("1574781501")
self.start()
# self.stop()
self.spider_status() if __name__ == '__main__':
dep = Deploy()
dep.run()

api参考官方:https://scrapyd.readthedocs.io/en/stable/api.html

scrapydWeb


特点:

Scrapyd 集群管理,可以配置管理多个scrapyd服务器

Scrapy 日志分析,爬虫实时进度可视化,统计信息展示

支持所有 Scrapyd API,不需要再手动的调用接口来管理和查看爬虫状态

状态监控的本质:向scrapyd请求日志,然后分析,运行scrapydweb的机器必须安装logparser模块;管理是通过调用scrapyd提供的api实现的

过程:开启/关闭爬虫,向scrapydweb发生请求,scrapydweb向scrapyd发送请求;scrapydweb不断的向scrapyd请求日志,然后用logparser解析日志,最终做展示。

scrapydweb配置:第一次运行scrapydweb命令,将在当前工作目录生成配置文件 "scrapydweb_settings.py"并使用,可用于自定义 Scrapyd 服务器列表等选项;scrapydweb依赖于配置文件,所以要在自定义的配置目录下运行scrapydweb命令

配置如下:

############################## 快速设置 开始 ###################################
# 配置本地访问scrapyweb的ip和端口,端口默认5000
SCRAPYDWEB_BIND = '127.0.0.1'   # 如果是在远程机器上,写远程地址
SCRAPYDWEB_PORT = 6000 # 是否开启访问认证限制
ENABLE_AUTH = True
USERNAME = 'root'
PASSWORD = '123456'


# ------------------------------ Chinese --------------------------------------
# 请先确保所有远程服务器已经安装和启动了scrapyd
# 如需远程访问 Scrapyd,需在 Scrapyd 配置文件中设置 'bind_address = 0.0.0.0',然后重启 Scrapyd

# 配置需要远程访问的scrapyd服务器地址,如果有多个服务器,添加各自的ip
# 如果远程服务器需要登录,则需配置用户名/密码
SCRAPYD_SERVERS = [
'127.0.0.1:6800',
# 'username:password@localhost:6801#group',
# ('username', 'password', 'localhost', '6801', 'group'),
]

# ------------------------------ Chinese --------------------------------------
# 假如 ScrapydWeb 和某个 Scrapyd 运行于同一台主机,建议更新如下三个设置项。
# ENABLE_LOGPARSER:The default is False, set it to True to automatically run LogParser as a subprocess at startup

LOCAL_SCRAPYD_SERVER = '127.0.0.1:6800'
# 配置爬虫日志目录
LOCAL_SCRAPYD_LOGS_DIR = r'D:\python\code\spider_review\lianjia\logs'
# 是否解析日志,需要先安装:pip install logparser,通过命令 logparser 启动 LogParser
ENABLE_LOGPARSER = True


############################## Scrapyd ########################################
# 解析的log文件类型
SCRAPYD_LOG_EXTENSIONS = ['.log', '.log.gz', '.txt']

############################## LogParser ######################################
# 是否备份访问过的所留下的本地日志,这样如果远程日志被删除,本地也可以依然使用
BACKUP_STATS_JSON_FILE = True


# 其他的配置默认即可

logparser可以将原来杂乱的日志做整理,进行显示

参看:https://segmentfault.com/a/1190000018006652?utm_source=tag-newest

分布式爬虫部署

每个服务器上都要安装scrapyd

将本地开发的爬虫分别部署到各个服务器上

通过scrapydweb配置,监控管理每个爬虫的运行状态

最终需要开启的服务,scrapyd,scrapydweb

其他:

需要用到scrapy的item,scrapydweb的item界面才会有日志展示

scrapyd--scrapydweb的更多相关文章

  1. Scrapy+Scrapyd+Scrapydweb实现爬虫可视化

    Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...

  2. 【python3】基于scrapyd + scrapydweb 的可视化部署

    一.部署组件概览 该部署方式适用于 scrapy项目.scrapy-redis的分布式爬虫项目 需要安装的组件有:     1.scrapyd  服务端 [运行打包后的爬虫代码](所有的爬虫机器都要安 ...

  3. 时隔五年,Scrapyd 终于原生支持 basic auth

    Issue in 2014 scrapy/scrapyd/issues/43 Pull request in 2019 scrapy/scrapyd/pull/326 试用 1. 安装: pip in ...

  4. scrapydWeb安装和使用

    1. 安装:pip install scrapydweb 2. 启动:scrapydweb 第一次执行,当前目录会生产配置文件:scrapydweb_settings_v8.py 配置账户和密码: # ...

  5. 笔记-爬虫部署及运行工具-scrapydweb

    笔记-爬虫部署及运行工具-scrapydweb 1.      简介 scrapyd是爬虫部署工具,但它的ui比较简单,使用不是很方便. scrapydweb以scrapyd为基础,增加了ui界面和监 ...

  6. scrapydweb的初步使用(管理分布式爬虫)

    https://github.com/my8100/files/blob/master/scrapydweb/README_CN.md 一.安装配置 1.请先确保所有主机都已经安装和启动 Scrapy ...

  7. scrapy的scrapyd使用方法

    一直以来,很多人疑惑scrapy提供的scrapyd该怎么用,于我也是.自己在实际项目中只是使用scrapy crawl spider,用python来写一个多进程启动,还用一个shell脚本来监控进 ...

  8. 如何将Scrapy 部署到Scrapyd上?

    安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...

  9. 如何部署Scrapy 到Scrapyd上?

    安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...

  10. Scrapyd部署爬虫

    Scrapyd部署爬虫 准备工作 安装scrapyd: pip install scrapyd 安装scrapyd-client : pip install scrapyd-client 安装curl ...

随机推荐

  1. Log4j2之ThreadContext

    简介 系统中使用log4j2作为日志系统,然而在高并发的情况下,多次请求的日志参杂在一起,要跟踪某个用户一次的请求操作所有日志是很麻烦的.幸运的是log4j中有相应的解决方案. NDC和MDC NDC ...

  2. 给Java0基础的五个学习的思路?

    关于Java初学者来说,想学习Java教程,需求了解,根底打好才干学得更好,Java教程之学习Java的路线图的五个必经阶段,希望能对Java学习者有所帮忙. 第一个阶段-java根底阶段 1.jav ...

  3. Maven配置教程

    Maven的下载 在Maven的官网即可下载,点击访问Apache Maven. 下载后解压即可,解压后目录结构如下: Maven常用配置 在配置之前请将JDK安装好. 1. 环境变量配置 添加M2_ ...

  4. vscode源码分析【四】程序启动的逻辑,最初创建的服务

    第一篇: vscode源码分析[一]从源码运行vscode 第二篇:vscode源码分析[二]程序的启动逻辑,第一个窗口是如何创建的 第三篇:vscode源码分析[三]程序的启动逻辑,性能问题的追踪 ...

  5. python画一片绿叶给你

    怎么用 turtle 画一个 π 字,于是我顺手到网上大致搜了下,发现网上没有画这个 π 字的,接着又用谷歌加英文搜索了下,还是没找到现成的答案. 不过通过这次搜索意外发现了一个有趣的网站,网站上有大 ...

  6. Luogu P3600 随机数生成器

    Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...

  7. Python的互斥锁与信号量

    并发与锁 a. 多个线程共享数据的时候,如果数据不进行保护,那么可能出现数据不一致现象,使用锁,信号量.条件锁 b. c.互斥锁1. 互斥锁,是使用一把锁把代码保护起来,以牺牲性能换取代码的安全性,那 ...

  8. Exploratory Testing 3.0 - 探索式测试

    最近看了James Bach新发的一篇文章,名为Exploratory Testing 3.0,文章链接:http://www.satisfice.com/blog/archives/1509 这篇文 ...

  9. python爬取 “得到” App 电子书信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 静觅 崔庆才 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  10. 5-网宿CDN客户端推流NGB

    网宿NGB调度系统(类似httpdns原理)从服务端分发给客户端推流IP,实现基于APP realip精准调度模式. 参考官网介绍:https://www.wangsu.com/content/det ...