目录:
前置
实践
部署
日常使用
参考
前置
问:写一份教程,说明如何先编写scrapy后,增加scrapyd,说明依赖jenkins和docker部署的流程
chatgpt答:以下是如何使用Scrapy和Scrapyd以及依赖Jenkins和Docker的部署流程的教程:
安装Scrapy和Scrapyd
首先,需要安装Scrapy和Scrapyd。在命令行中输入以下命令:
pip install scrapy
pip install scrapyd
新建Scrapy工程 在命令行中,使用以下命令创建新的Scrapy项目:
scrapy startproject your_project_name
编写Scrapy爬虫 在你的Scrapy项目中,可以创建一个名为spider.py
的文件来编写爬虫。这个文件应该包含Scrapy爬虫的逻辑。以下是一个示例的代码:
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://www.example.com']
def parse(self, response):
# 爬虫逻辑
配置Scrapyd 在你的Scrapy项目中,可以创建名为scrapy.cfg
的文件进行Scrapyd的配置。以下是一个示例的代码:
[settings]
default = myproject.settings
[deploy:scrapyd]
url = http://localhost:6800/
project = myproject
[log]
level = INFO
project
是你的Scrapy项目的名称 -url
是Scrapyd的地址 ## 启动Scrapyd 在命令行中,输入以下命令启动Scrapyd:
scrapyd
使用Scrapyd部署Scrapy爬虫 在你的Scrapy项目中,使用以下命令打包你的爬虫:
scrapyd-deploy your_target -p your_project_name
your_target
应该是你已经配置好的Scrapyd目标。这个命令将会打包你的爬虫成一个egg文件。例如:
scrapyd-deploy my_production_target -p myproject
配置Jenkins 在Jenkins中,新建一个名为"Scrapyd部署"的流程:
- 配置你的Jenkins访问Scrapyd服务器的插件和环境变量
- 选择一个适合你的支持Python和Docker运行的诸如Ubuntu的节点
- 在流程中配置构建步骤,使用以下命令:
pip install scrapyd-client
python setup.py install
scrapyd-deploy my_production_target -p myproject
配置Docker 最后,将Scrapyd配置到Docker集群中,以确保你能够轻松地在多台机器上部署Scrapy爬虫。在Docker中,你可以使用以下命令:
docker run -d --name scrapyd -p 6800:6800 scrapinghub/scrapyd
除此之外,你也可以使用Docker Compose或其他容器编排工具来对Scrapyd进行管理和部署。
总结 以上就是如何使用Scrapy和Scrapyd以及依赖Jenkins和Docker的部署流程。希望本文条理清晰,对你有所帮助!
实践
需求背景:通过爬虫获取各应用商店的公司应用信息
爬虫逻辑脚本:
- 使用Scrapy框架 参考 Scrapy 入门教程 | 菜鸟教程 - https://www.runoob.com/w3cnote/scrapy-detail.html
- 按照信息获取逻辑编写脚本 主要的工作量就只在这里 已完成
爬虫管理服务:
- 使用Scrapyd 参考https://scrapyd.readthedocs.io/ 负责管理Spider进程的启动、停止和监控等基础功能
- 增加Scrapyd依赖包说明和项目配置
[scrapyd]
eggs_dir = eggs # egg文件存放目录
logs_dir = logs # 日志文件存放目录 logs_dir/project/spidername/****.log
items_dir = items # item文件存放目录 items_dir/project/spidername/***.jl
jobs_to_keep = 5 # 保留log日志文件数量
dbs_dir = # 存放sqlitedb文件目录 dbs_dir/**.db 本例子中无该配置
max_proc = 0 # 启动scrapyd进程最大数,设置为0则默认最大进程数为 cpus数*max_proc_per_cpu
max_proc_per_cpu = 4 # 每个cpu启动scrapyd进程数
finished_to_keep = 100 # 保留jobs的数量,超过该数自动删除之前的记录
poll_interval = 5.0 # 每次拉去任务的间隔时间
bind_address = 0.0.0.0 # tcp服务绑定的IP 默认是127.0.0.1 需要修改为 0.0.0.0
http_port = 6800 # tcp服务绑定端口号
username = # 设置用户名
password = # 设置密码
debug = off # 是否开启debug True or False
runner = scrapyd.runner # 默认的启动类
# jobs保存方式 jobstorage = scrapyd.jobstorage.MemoryJobStorage|scrapyd.jobstorage.SqliteJobStorage 内存保存和sqlite保存 本例子中无该配置
application = scrapyd.app.application # 调用scrapy服务类
launcher = scrapyd.launcher.Launcher # 任务调度启动类
webroot = scrapyd.website.Root # web页面启动类
# 管理egg文件 eggstorage = scrapyd.eggstorage.FilesystemEggStorage 本例子中无该配置
[services]
schedule.json = scrapyd.webservice.Schedule # 添加任务接口
cancel.json = scrapyd.webservice.Cancel # 取消任务接口
addversion.json = scrapyd.webservice.AddVersion # 添加project接口
listprojects.json = scrapyd.webservice.ListProjects # 查询所有project项目接口
listversions.json = scrapyd.webservice.ListVersions # 查询所有project 的version接口
listspiders.json = scrapyd.webservice.ListSpiders # 查询project,version下所有的spider
delproject.json = scrapyd.webservice.DeleteProject # 删除project
delversion.json = scrapyd.webservice.DeleteVersion # 删除project指定version
listjobs.json = scrapyd.webservice.ListJobs # 查询出所有项目 包括历史任务,正在执行任务,等待执行任务
daemonstatus.json = scrapyd.webservice.DaemonStatus # 查询scrapyd server的状态
部署
步骤1、在xxxx先部署Scrapyd
设置启动命令为 venv/bin/scrapyd
设置负载均衡 后可访问scrapyd服务,此时未关联待管理的爬虫脚本,所以可用项目显示为空(重启Scrapyd会回到这种状态)
步骤2、配置爬虫项目appSpider下的 scrapy.cfg
[settings]
default = appSpider.settings
[deploy:cloud]
url = http://scrapyd.test.xxx.com/
project = appSpider
构建镜像启动命令为
venv/bin/scrapyd-deploy cloud -p appSpider
步骤3、使用以下管理接口可以执行爬虫
curl http://scrapyd.test.xxx.com/schedule.json -d project=appSpider -d spider=appleappstore -d jobid=1
curl http://scrapyd.test.xxx.com/schedule.json -d project=appSpider -d spider=huawei -d jobid=1
# jobid 不设置则为随机uuid
步骤4、查看执行情况、日志
https://scrapyd.test.xxx.com/jobs
https://scrapyd.test.xxx.com/items/appSpider/appleappstore/items.xml
步骤5、增加appSpider项目下爬虫,增加代码后构建、更新镜像版本即可。如需新增项目,重复步骤2
日常使用
直接访问https://scrapyd.test.xxx.com/
如发现Available projects:存活项目名称为空,则为job任务下线,只需要新建应用版本即可恢复使用
触发爬虫任务进行步骤3
拿数据进行步骤4
参考
https://zhuanlan.zhihu.com/p/99250581;Scrapyd对接Docker - Python3网络爬虫开发实战 - https://python3webspider.cuiqingcai.com/15.3scrapyd-dui-jie-docker
扩展:https://github.com/crawlab-team/crawlab
风险:未授权访问
由于爬取内容原本为外部公开信息 信息未授权访问问题不大;
但爬虫执行会消耗资源 可后续增加配置文件中配置爬虫成功和失败的webhook通知地址,可以将数据推送到指定的webhook地址
补充:
只是更新爬虫的话,更新appspider 爬虫代码,构建、推送新镜像,删除旧版本,新增新版本镜像应用。在容器日志中观察启动情况。正常可以进行步骤3
如果发现爬虫地址的数据不见了 项目都被清空了 可能是因为部署问题(系统对应用资源调整导致的应用下线),重启下appSpider能恢复正常
评论区