冷文学习者

文章 分类 标签
34 7 53

公告

冷文博客(KEVINLU98.COM),记录我日常业余的一点一滴。
利用业余时间写与typecho与emlog的主题、插件等,同时也分享一些资源与技术帖
顺带帮大家免费代下载IT教程吧的资源 传送门
友链申请地址(直接评论即可): 传送门

Scrapy爬虫Docker部署

MR丶冷文 2021-07-02 656 0条评论 其它 scrapydscrapydockerspiderkeeper

首页 / 正文

说明

Scrapy作为一款优秀的Python爬虫框架,相信很多人都可以利用它完成各式各样的爬虫job,那么我们的Scrapy项目如何部署到生产环境呢?部署后如何管理我们的爬虫job呢?

有人说直接上传代码到服务器上然后执行,这样当然可以,但这种方式不够优雅,不方便管理。

用下面这种方式来管理我们的爬虫任务是不是方便了很多,也简单了很多

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/17d50f1f17f2459093934d5008d6ba95.png

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/0164d671bf3748e581b3d7be6bf8cad9.png

这套页面其实就是scrapyd+spiderkeeper实现的

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/4666b3f3ec2e4fc9b89840d29e2302f6.png

​ 按照官方的介绍来看它就是一个用于部署和运行scrapy爬虫的程序,它允许我们使用JSON API的方式来管理我们的爬虫程序,换而言之,就是scrapyd可以用来部署scrapy项目,但没有一个可视化的页面来操作,只能通过HTTP请求调用它提供的接口来操作,很不方便。

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/911bc9c135dc4979a75395d2a6087088.png

大致意思就是spiderkeeper提供了一个dashboard来调度管理爬虫程序,它目前支持的爬虫服务有scrapyd,换而言之就是对scrapyd进行了封装,提供了可视化的面板来操作

安装Docker

传送门 https://docs.docker.com/get-docker/

找到自己操作系统对应的版本下载即可

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/ec269e41e65d42e9953cdfe9b6ca6e56.png

安装成功后终端执行docker --version可以出现版本号即可

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/82bfc17567184eb383cf7f9f922149fa.png

编写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"]
  • 此时目录结构应该是这样的

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/50801cd4d8e6404c8318d47c660dbc10.png

构建镜像并生成容器

  • 利用Dockerfile生成镜像,执行命令,格式如下
# docker build -t 镜像名称:镜像版本 .
docker build -t scrapyd-container:1.0 .

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/9c3ae40c2c95480f91492c80b4ad13cc.png

  • 利用docker images命令查看本机镜像

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/0a93463d180a486f909bdb132fd6e57b.png

  • 利用刚刚生成的镜像创建容器,我这里以镜像名称为scrapyd-container
# docker run -di --name=容器名称 -p 5000:5000 镜像名称:镜像版本
docker run -di --name=scrapyd-container -p 5000:5000 scrapyd-container:1.0

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/e48b97131b5145d28d4dbb2a7e0b8b9e.png

本地项目打包

  • 安装scrapyd-client
pip install scrapyd-client 
  • 在项目目录执行如下命令将项目打包为egg
scrapyd-deploy --build-egg output.egg
  • 生成了output.egg的文件

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/65ca93fdade948f09c86273bd306feaf.png

Dashboard使用

  • 点击create projecrt创建一个项目

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/eb950a67e0c847dfb763033cd0be7c60.png

  • 点击侧栏的Deploy

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/8ffa885830094fd88a995a26856221de.png

  • 上传刚刚的egg包

image-20210702190213560

  • 点击periodic jobs

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/e9825561c55a4d83a7d6a1d60c1d71b6.png

  • 点击add job

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/5042de911bdd4f3f8e40cb5128a27c85.png

  • 选择爬虫job与调度

https://imagebed-1252410096.cos.ap-nanjing.myqcloud.com/20210702/80f207ddea1d4ad887e8ce14437270f0.png

希望本文对您有所帮助

评论(0)

当前没有评论,还不快来留下第一个脚印吧

热门文章

最新评论

日历

2021年09月

   1234
567891011
12131415161718
19202122232425
2627282930  

文章目录