说明
Scrapy
作为一款优秀的Python
爬虫框架,相信很多人都可以利用它完成各式各样的爬虫job,那么我们的Scrapy项目如何部署到生产环境呢?部署后如何管理我们的爬虫job呢?
有人说直接上传代码到服务器上然后执行,这样当然可以,但这种方式不够优雅,不方便管理。
用下面这种方式来管理我们的爬虫任务是不是方便了很多,也简单了很多
这套页面其实就是scrapyd+spiderkeeper
实现的
按照官方的介绍来看它就是一个用于部署和运行scrapy爬虫的程序,它允许我们使用JSON API的方式来管理我们的爬虫程序,换而言之,就是scrapyd可以用来部署scrapy项目,但没有一个可视化的页面来操作,只能通过HTTP请求调用它提供的接口来操作,很不方便。
- Spiderkeeper:https://github.com/DormyMo/SpiderKeeper
大致意思就是spiderkeeper提供了一个dashboard来调度管理爬虫程序,它目前支持的爬虫服务有scrapyd,换而言之就是对scrapyd进行了封装,提供了可视化的面板来操作
安装Docker
传送门 https://docs.docker.com/get-docker/
找到自己操作系统对应的版本下载即可
安装成功后终端执行docker --version
可以出现版本号即可
编写Dockerfile
- 在本机随便一个位置创建目录,我这里以
scrapy-container
为例 - 进入到刚刚创建的目录,然后创建
scrapyd.conf
文件用于自定义scrapyd的配置,内容如下(我这里使用的是scrapyd的默认配置)
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
- 利用
pip freeze > requirements.txt
将项目运行需要的依赖导出到当前目录 - 创建
start.sh
启动脚本,即在容器开始运行时执行,内容如下
#!/bin/bash
scrapyd &
spiderkeeper --server=http://localhost:6800
- 创建
Dockerfile
文件,内容如下
FROM python:3.6
ADD . /code
WORKDIR /code
COPY ./scrapyd.conf /etc/scrapyd/
EXPOSE 5000
RUN pip3 install --upgrade pip setuptools==45.2.0
RUN pip3 install scrapy
RUN pip3 install requests
RUN pip3 install scrapyd
RUN pip3 install spiderkeeper
RUN pip3 install numpy
RUN pip3 install -r requirements.txt
RUN chmod +x /code/start.sh
CMD ["/code/start.sh"]
- 此时目录结构应该是这样的
构建镜像并生成容器
- 利用
Dockerfile
生成镜像,执行命令,格式如下
# docker build -t 镜像名称:镜像版本 .
docker build -t scrapyd-container:1.0 .
- 利用
docker images
命令查看本机镜像
- 利用刚刚生成的镜像创建容器,我这里以镜像名称为scrapyd-container
# docker run -di --name=容器名称 -p 5000:5000 镜像名称:镜像版本
docker run -di --name=scrapyd-container -p 5000:5000 scrapyd-container:1.0
- 访问http://localhost:5000 用户名admin,密码admin
本地项目打包
- 安装
scrapyd-client
pip install scrapyd-client
- 在项目目录执行如下命令将项目打包为egg
scrapyd-deploy --build-egg output.egg
- 生成了
output.egg
的文件
Dashboard使用
- 点击
create projecrt
创建一个项目
- 点击侧栏的Deploy
- 上传刚刚的egg包
- 点击periodic jobs
- 点击add job
- 选择爬虫job与调度
希望本文对您有所帮助
没看见下载
螃蟹分享
谢谢分享
好耶
谢谢分享