scrapyd--scrapydweb
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和端口,端口默认5000SCRAPYDWEB_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 startupLOCAL_SCRAPYD_SERVER = '127.0.0.1:6800'# 配置爬虫日志目录LOCAL_SCRAPYD_LOGS_DIR = r'D:\python\code\spider_review\lianjia\logs'# 是否解析日志,需要先安装:pip install logparser,通过命令logparser
启动 LogParserENABLE_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的更多相关文章
- Scrapy+Scrapyd+Scrapydweb实现爬虫可视化
Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...
- 【python3】基于scrapyd + scrapydweb 的可视化部署
一.部署组件概览 该部署方式适用于 scrapy项目.scrapy-redis的分布式爬虫项目 需要安装的组件有: 1.scrapyd 服务端 [运行打包后的爬虫代码](所有的爬虫机器都要安 ...
- 时隔五年,Scrapyd 终于原生支持 basic auth
Issue in 2014 scrapy/scrapyd/issues/43 Pull request in 2019 scrapy/scrapyd/pull/326 试用 1. 安装: pip in ...
- scrapydWeb安装和使用
1. 安装:pip install scrapydweb 2. 启动:scrapydweb 第一次执行,当前目录会生产配置文件:scrapydweb_settings_v8.py 配置账户和密码: # ...
- 笔记-爬虫部署及运行工具-scrapydweb
笔记-爬虫部署及运行工具-scrapydweb 1. 简介 scrapyd是爬虫部署工具,但它的ui比较简单,使用不是很方便. scrapydweb以scrapyd为基础,增加了ui界面和监 ...
- scrapydweb的初步使用(管理分布式爬虫)
https://github.com/my8100/files/blob/master/scrapydweb/README_CN.md 一.安装配置 1.请先确保所有主机都已经安装和启动 Scrapy ...
- scrapy的scrapyd使用方法
一直以来,很多人疑惑scrapy提供的scrapyd该怎么用,于我也是.自己在实际项目中只是使用scrapy crawl spider,用python来写一个多进程启动,还用一个shell脚本来监控进 ...
- 如何将Scrapy 部署到Scrapyd上?
安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...
- 如何部署Scrapy 到Scrapyd上?
安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...
- Scrapyd部署爬虫
Scrapyd部署爬虫 准备工作 安装scrapyd: pip install scrapyd 安装scrapyd-client : pip install scrapyd-client 安装curl ...
随机推荐
- BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学
问题描述 BZOJ2339 本题的一些心得 对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化. 设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推 ...
- Codeforces Round #594 (Div. 1) A. Ivan the Fool and the Probability Theory 动态规划
A. Ivan the Fool and the Probability Theory Recently Ivan the Fool decided to become smarter and stu ...
- golang数据结构之快速排序
具体过程:黑色标记代表左指针,红色标记代表右指针,蓝色标记代表中间值.(依次从左往向下) //QuickSort 快速排序 func QuickSort(left ]int) { l := left ...
- PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串
需求 如果需要将可能含有中文的字符串进行拆分成数组,我们下面以 utf-8 编码为例. 解决方案一 我习惯的方法可能是: mb_internal_encoding("UTF-8") ...
- PHP 扩展与 ZEND 引擎的整合
PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如 ...
- 栈与后缀表达式C实现
#include<stdio.h> #include<stdlib.h> typedef char datatype; typedef struct stack { int t ...
- @Transactional什么情况才生效
只有runtimeexception并且没有被try catch处理的异常才会回滚. 想要回滚,不要去try 还有一个坑时逻辑上的问题,之前总以为插入,更新后,返回值为0,@Transactional ...
- (四)初识NumPy(函数和图像的数组表示)
本章节主要介绍NumPy中的三个主要的函数,分别是随机函数.统计函数和梯度函数,以及一个较经典的用数组来表示图像的栗子!,希望大家能有新的收货,共同进步! 一.np.random的随机函数(1) ra ...
- sql慢查询工具(配置代码)
# 在mysql的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]中配置懒查询 slow_query_log = ON # 是否已经开启慢查询 long_q ...
- 为了“小命”,这款APP一定要下!火爆了!
前言中国地震台网在 6 月 17 日测定:6 月 17 日 22 时 55 分,四川省宜宾市长宁县发生 6 级地震,震源深度 16 千米.成都高新减灾研究所通过电台广播.手机短信.电视等途径,提前 6 ...