本文针对scrapy爬虫在调试完成后,怎样部署到linux服务器,以及使用scrapyd-client上传的相关配置做简单总结
服务端 : nginx+htpasswd (配置访问端口及密码)>>> screen(窗口切换工具,用于将前台守护进程类软件变成后台守护型)+scrapyd(服务端执行scrapy爬虫的相关进程)
客户端:安装scrapyd-client 配置 爬虫目录下的scrapy.cfg 文件,使用crontable 和curl 两个工具进行定时访问指定url启动爬虫(此操作亦可在服务端配置)
nginx、htpasswd、screen 都是普通软件 使用"yum install <软件名> "方式安装
scrapyd 是Python软件 需要使用"pip/pip3 install scrapyd"方式安装
找到nginx 的配置文件 我的在:/usr/local/nginx/conf/nginx.conf 里面 按照例子修改(HTTP下可有多个server)
server {
listen 6801; 端口号
location / { 默认位置
proxy_pass http://127.0.0.1:6800/;转发地址 这里基本不用改
auth_basic "Restricted"; 提示文字
auth_basic_user_file /etc/nginx/conf.d/.htpasswd; 密码文件位置
}}
然后使用命令 nginx启动nginx
使用命令 screen 进入到screen环境中,
再使用命令 scrapyd 命令启动scrapyd 这样你就可以在 任何地方使用访问http://你的ip:6801 按照提示输入用户名密码访问你的scrapyd的网页统计了(后面client也会使用密码链接这个地址)
最后使用 组合键 ctrl+a d三个键 退出screen 这时候你就可以安心退出SSH链接了。
先使用 pip/pip3 install scrapyd-client 安装上传scrapy项目用的工具
然后找到项目的scrapy.cfg文件,修改如下
[deploy]修改为[deploy:xx_project]样式,这个xx_project就是你本地项目的名字
在这个标签下 修改对应值到刚才你设置的值
url = http://你的ip:6801
username = 用户名
password = 密码
project = 项目名(不是上面的值,scrapy startproject时候的名字 默认就行)
使用命令"scrapyd-deploy
Server response (200):
{"node_name": "VM-0-5-centos", "status": "ok", "project": "<服务器端项目名字>", "version": "1609213087", "spiders": 4}
如果错误会返回错误原因
4. 调启远端爬虫
可以使用命令:
" curl http://用户名:密码@<远端ip>:6801/schedule.json -d project=<服务器端项目名字> -d spider=<需要启动爬虫的名字> "
来激活爬虫,同时可以在
http://远端IP:6801 网址里的jobs里面看到你正在运行的项目 还可以看到其ID
5.停止爬取
" curl http://用户名:密码@<远端ip>:6801/cancel.json -d project=<服务器端项目名字> -d job=<上一步返回或者在监控页面看到的ID>"
6.定时爬取:
使用命令 “crontab -e”来编辑linux内置的定时器模块,将上面 3. 的命令复制到对应的命令位置即可
详情请自己搜索crontab用法 简单而且功能很多建议学习
在服务端可以用 127.0.0.1 代替公网网址
PS: 操作心得
1.服务端
那个密码的软件确实叫那个奇怪的名字
screen或者其他进程管理软件都可以,screen相对简单 可以上网找相关介绍几分钟就可以了解
scrapyd 在启动后报错,尤其是一些自己定义的类找不到,可能是因为路径问题,我将import xx 改成from .xx import xx这种形式就可以正常导入了
2. 客户端
读写外部文件时候最好使用绝对路径(服务器的路径),不然用相对路径可能会出现找不到相关文件或者无法创建的问题。
crontab 和curl 这两个命令都可以在服务端操作,在服务端操作时候可以用127.0.0.1代替外网ip,而且不用用户名密码
3. 不用密码保护的
如果是Demo不想设置Nginx和密码的话,想直接访问IP的6800来调用服务的话,可以不装nginx和htpasswd 在 /usr/local/lib/python3.6/site-packages/scrapyd/default_scrapyd.conf
(根据自己Python环境找一下)文件下的 bindip 修改为0.0.0.0 因为有重大安全隐患(可以被上传任意spider执行任意Python脚本),墙裂建议只用于演示和内网安全环境下