GitHub:https://github.com/djm/python-scrapyd-api
Scrapyd,GitHub:https://github.com/scrapy/scrapyd
scrapyd 是由scrapy 官方提供的爬虫管理工具,可以非常方便地上传、控制爬虫并且查看运行日志。它提供一个JSON web service 监听的请求,我们可以从任何一台可以连接到服务器的电脑发送请求安排爬虫运行,或者停止正在运行的爬虫。甚至,我们可以使用它提供的API上传新爬虫而不必登录到服务器上进行操作。
ps: 注意是事项见文尾,及常见错误解决办法
ps: 如果想实现 爬虫定时调度,可以调用Gerapy API 结合liunx crontab 或者其他定时任务工具,也可以结合shell
ps 进行日志的存储 同样可以调用API,或在scrapy settings 设置
ps:分布式爬虫 也可在scrapy中写shell统一shell调度, push url_key 进入 redis 后 shell 分批次执行
scrapy crawl spidername > /home/admin/xxx/log/crawler.log 2>&1
scrapy crawl spidername2 > /home/admin/xxx/log/crawler.log 2>&1
scrapy crawl spidername3 > /home/admin/xxxx/log/crawler.log 2>&1
安装 Scrapyd
pip install scrapyd
默认情况下scrapyd 监听 0.0.0.0:6800
端口,运行scrapyd 后在浏览器http://localhost:6800/
即可查看到当前可以运行的项目:
运行scrapyd 服务
直接运行命令scrapyd:
scrapyd
ps :如果运行scrapyd出现错误 -bash scrapyd command not found 找到python 安装目录 ln -s /usr/local/python3/bin/scrapyd /usr/bin/scrapyd
运行scrapyd 并在浏览器中打开
部署scrapy 项目
使用scrapyd-client
提供的scrapyd-deploy
工具.
pip install scrapyd-client
修改工程目录下的 scrapy.cfg 文件
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.io/en/latest/deploy.html
[settings]
default = movie_heaven.settings
[deploy:movie_heaven_deploy]
url = http://127.0.0.1:6800/
project = movie_heaven
部署项目 并启动爬虫
# 部署项目到服务器
scrapyd-deploy movie_heaven_deploy -p movie_heaven
# 查看部署方式
scrapy list
scrapyd-deploy -l
#启动爬虫 我这里有两个爬虫,你或许少或许会更多
# curl http://127.0.0.1:6800/schedule.json -d project=movie_heaven -d spider=dyttspider -d spider=6spider
#列出爬虫
# curl http://localhost:6800/listspiders.json?project=movie_heaven
# 暂定爬虫 根据scrapyd中每个爬虫运行产生的job id
curl http://localhost:6800/cancel.json -d project=movie_heaven -d job=94bdxxxxxxxxxxxxxx9bafd
log 信息
(develop_py3) yangshilongdeMacBook-Pro:spiders ysl$ scrapyd-deploy movie_heaven_deploy -p movie_heaven
Packing version 1557366747
Deploying to project "movie_heaven" in http://127.0.0.1:6800/addversion.json
Server response (200):
{"node_name": "yangshilongdeMacBook-Pro.local", "status": "ok", "project": "movie_heaven", "version": "1557366747", "spiders": 2}
(develop_py3) yangshilongdeMacBook-Pro:spiders ysl$ curl http://127.0.0.1:6800/schedule.json -d project=movie_heaven -d spider=dyttspider -d spider=6spider
{"node_name": "yangshilongdeMacBook-Pro.local", "status": "ok", "jobid": "2797a4ba71fd11e9aaeff2189896df11"}
(develop_py3) yangshilongdeMacBook-Pro:spiders ysl$
ps: 如报错 builtins.AttributeError: 'int' object has no attribute 'splitlines' >>> 进行版本回退 Scrapy==1.6.0 Twisted==18.9.0
https://files.pythonhosted.org/packages/5d/0e/a72d85a55761c2c3ff1cb968143a2fd5f360220779ed90e0fadf4106d4f2/Twisted-18.9.0.tar.bz2
我们还可以使用api 去访问 ,返回一个包含各个spider运行的情况,包括运行完成的正在运行的,job id等
Scrapyd-API GitHub:https://github.com/djm/python-scrapyd-api
from scrapyd_api import ScrapydAPI
scrapyd = ScrapydAPI('http://127.0.0.1:6800')
print(scrapyd.list_jobs('project_name'))
# ------
返回一个包含各个spider运行的情况,包括运行完成的正在运行的,job id等信息的 dict
{
xxx:xxx
}
到这里scrapyd的部署就完成了,我们可以在scrapyd 查看任务进程 日志信息,运行和启动时间,对爬虫进行管理
Gerapy
Gerapy 是一款分布式爬虫管理框架,支持 Python 3,基于 Scrapy、Scrapyd、Scrapyd-Client、Scrapy-Redis、Scrapyd-API、Scrapy-Splash 开发 GitHub:https://github.com/Gerapy/Gerapy。
安装
$ pip3 install gerapy
执行完毕之后,本地便会生成一个名字为 gerapy 的文件夹,接着进入该文件夹,可以看到有一个 projects 文件夹,我们后面会用到这个文件。紧接着执行数据库初始化命令:
cd gerapy
gerapy migrate
这样它就会在 gerapy 目录下生成一个 SQLite 数据库,同时建立数据库表。
接着我们只需要再运行命令启动服务
gerapy runserver
(develop_py3) yangshilongdeMacBook-Pro:spiders ysl$ gerapy runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
May 09, 2019 - 09:54:27
Django version 2.2.1, using settings 'gerapy.server.server.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
秦东完毕后 我们在浏览器中打开 http://localhost:8000/,就可以看到 Gerapy 的主界面
可以在主机管理界面编辑添加我们需要的机器 例如 我添加一台华为云机器
在调度界面 进行爬虫尽心监控
这里我们可以自由地配置、编辑、部署我们的 Scrapy 项目,点击左侧的 Projects ,即项目管理选项
假设现在我们有一个新的 Scrapy 项目,如果我们想要进行管理和部署,还记得初始化过程中提到的 projects 文件夹吗?这时我们只需要将项目拖动到刚才 gerapy 运行目录的 projects 文件夹下,(如果旧的项目增加了新的spider,重新挂载部署项目即可,忽略此步操作)
这时刷新页面,我们便可以看到 Gerapy 检测到了这个项目,同时它是不可配置、没有打包的
这时我们可以点击部署按钮进行打包和部署,在右下角我们可以输入打包时的描述信息,类似于 Git 的 commit 信息,然后点击打包按钮,即可发现 Gerapy 会提示打包成功,同时在左侧显示打包的结果和打包名称
打包成功之后,我们便可以进行部署了,我们可以选择需要部署的主机,点击后方的部署按钮进行部署,同时也可以批量选择主机进行部署
另外Gerapy 还支持 编写爬虫的功能, GitHub:https://github.com/Gerapy/Gerapy。
常见问题:
scrapy 启动报错
ps: 如报错 builtins.AttributeError: 'int' object has no attribute 'splitlines' >>> 进行版本回退 Scrapy==1.6.0 Twisted==18.9.0
wget https://files.pythonhosted.org/packages/5d/0e/a72d85a55761c2c3ff1cb968143a2fd5f360220779ed90e0fadf4106d4f2/Twisted-18.9.0.tar.bz2
cd Twisted-xxx.tar.bz2
tar -xjvf Twisted-xxx.tar.bz2
python3 setup.py install
项目部署时 报错
(develop_py3) yangshilongdeMacBook-Pro:spiders ysl$ scrapyd-deploy movie_heaven_deploy -p movie_heaven
Packing version 1557390952
Deploying to project "movie_heaven" in http://114.116.125.244:6800/addversion.json
Deploy failed: <urlopen error [Errno 61] Connection refused>
服务器安装完成scrapyd 后
scrapyd 安装在 /xx/xxx/xxxx/python3.x/site-packages/scrapyd
配置文件: default_scrapyd.conf
参数 bind_address 默认是 127.0.0.1 表示只允许本机访问
修改为 0.0.0.0 运行任何ip访问
然后重启服务