借助 docker, scrapyd, scrapydweb 部署scrapy项目
scrapy采集程序开发完毕,难道还命令行启动吗?既然有炫酷的scrapyd的部署服务和scrapyweb这样的可视化界面,抱着学习的态度研究一波。在docker上成功进行了部署。本机局域网的IP为192.168.xx.xx
一. docker 部署 scrapyd
文件准备
# 目录下的文件
# 通过docker build 制作镜像
Dockerfile
# scrapyd的配置文件
scrapyd.conf
# 依赖包,项目会在scrapyd所在环境上运行
requestments.txt
1. Dockerfile
FROM python:3.8
WORKDIR /code
RUN mkdir ./logs
COPY scrapyd.conf /etc/scrapyd/
COPY requirements.txt .
EXPOSE 6800
RUN pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 默认的logs位置是在 /root/logs; RUN mkdir /root/logs
CMD logparser -dir ./logs & scrapyd
2. scrapyd.conf
[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
username =
password =
debug = off
runner = scrapyd.runner
jobstorage = scrapyd.jobstorage.MemoryJobStorage
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
eggstorage = scrapyd.eggstorage.FilesystemEggStorage
[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
3. requestments.txt
beautifulsoup4==4.11.1
fake-useragent==0.1.11
lxml==4.8.0
pymongo==3.5.0
PyMySQL==1.0.2
pyquery==1.4.3
python-scrapyd-api==2.1.2
redis==4.3.1
requests==2.27.1
Scrapy==2.6.1
scrapy-redis==0.7.2
Scrapy-Redis-BloomFilter==0.8.1
scrapy-splash==0.8.0
scrapyd==1.3.0
logparser==0.8.2
制作镜像和启动容器
# 制作镜像
docker build -t lpc/scrapyd .
# 启动容器
docker run -d -p 6800:6800 --name scrapyd lpc/scrapyd
scrapyd服务启动成功之后,因为scrapyd.conf的bind设置为0.0.0.0, 访问http://192.168.xx.xx:6800可以看到成功界面, 界面如下:
二. docker 部署scrapydweb
文件准备
# 制作scrapydweb的镜像
Dockerfile
# scrapydweb 的配置文件,为方便修改,我这次使用了挂载的方式
# 文件所在目录为 D:/volume/scrapydweb
scrapydweb_settings_v10.py
1. Dockerfile
FROM python:3.8
WORKDIR /code
EXPOSE 5000
RUN pip3 install Werkzeug==2.0.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip3 install scrapydweb==1.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD scrapydweb
2. scrapydweb_settings_v10.py
文件就不往上放了,本地pip scrapydweb包,执行scrapydweb,会在当前目录生成该文件。特别的做如下改动
# 声明scrapyd服务所在的位置
SCRAPYD_SERVERS = [
'192.168.xx.xx:6800'
]
制作镜像和启动容器
# 制作镜像
docker build -t lpc/scrapydweb .
# 启动容器
docker run -d -p 5000:5000 -v D/volume/scrapydweb:/code --name scrapydweb lpc/scrapydweb
通过 192.168.xx.xx 我们可以成功访问到scrapydweb的界面,界面如下:
三. 额外记录打包命令
我们可以通过scrapydweb界面上进行打包操作,这里不再赘述。此处记录本地项目命令打包
1. 下载打包模块
pip install scrapy-client
2. 修改配置文件
修改scrapy项目路径下的文件 scrapy.cfg
[settings]
default = xxx.settings
[deploy:vm1]
url = http://192.168.xx.xx:6800/
project = xxx
3. 打包给scrapyd服务
scrapyd-deploy vm1 -p xxx