spider-admin-pro 一个集爬虫Scrapy+Scrapyd爬虫项目查看 和 爬虫任务定时调度的可视化管理工具

简介: spider-admin-pro 一个集爬虫Scrapy+Scrapyd爬虫项目查看 和 爬虫任务定时调度的可视化管理工具

image.png

简介

Spider Admin Pro 是Spider Admin的升级版


简化了一些功能;

优化了前端界面,基于Vue的组件化开发;

优化了后端接口,对后端项目进行了目录划分;

整体代码利于升级维护。

目前仅对Python3进行了支持

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9m5GDiK3-1649514857795)(https://github.com/mouday/spider-admin-pro/raw/master/doc/img/spider-admin-pro.png)]


安装启动

本项目基于Python3.7.0 开发,所以推荐使用Python3.7.0及其以上版本


方式一:


$ pip3 install spider-admin-pro
$ python3 -m spider_admin_pro.run

方式二:


$ git clone https://github.com/mouday/spider-admin-pro.git
$ python3 spider_admin_pro/run.py

配置参数

配置优先级:


yaml配置文件 >  env环境变量 > 默认配置

1、默认配置


# flask 服务配置
PORT = 5002
HOST = '127.0.0.1'
# 登录账号密码
USERNAME = admin
PASSWORD = "123456"
JWT_KEY = FU0qnuV4t8rr1pvg93NZL3DLn6sHrR1sCQqRzachbo0=
# token过期时间,单位天
EXPIRES = 7
# scrapyd地址, 结尾不要加斜杆
SCRAPYD_SERVER = 'http://127.0.0.1:6800'
# 调度器 调度历史存储设置
# mysql or sqlite and other, any database for peewee support
SCHEDULE_HISTORY_DATABASE_URL = 'sqlite:///dbs/schedule_history.db'
# 调度器 定时任务存储地址
JOB_STORES_DATABASE_URL = 'sqlite:///dbs/apscheduler.db'
# 日志文件夹
LOG_DIR = 'logs'

2、env环境变量


在运行目录新建 .env 环境变量文件,默认参数如下


注意:为了与其他环境变量区分,使用SPIDER_ADMIN_PRO_作为变量前缀


如果使用python3 -m 运行,需要将变量加入到环境变量中,运行目录下新建文件env.bash


注意,此时等号后面不可以用空格


# flask 服务配置
export SPIDER_ADMIN_PRO_PORT=5002
export SPIDER_ADMIN_PRO_HOST='127.0.0.1'
# 登录账号密码
export SPIDER_ADMIN_PRO_USERNAME='admin'
export SPIDER_ADMIN_PRO_PASSWORD='123456'
export SPIDER_ADMIN_PRO_JWT_KEY='FU0qnuV4t8rr1pvg93NZL3DLn6sHrR1sCQqRzachbo0='

增加环境变量后运行


$ source env.bash
$ python3 -m spider_admin_pro.run

[注意]:


为了简化配置复杂度,方式2:env环境变量,计划将在下一版本移除


3、自定义配置


在运行目录下新建config.yml 文件,运行时会自动读取该配置文件


eg:


# flask 服务配置
PORT: 5002
HOST: '127.0.0.1'
# 登录账号密码
USERNAME: admin
PASSWORD: "123456"
JWT_KEY: "FU0qnuV4t8rr1pvg93NZL3DLn6sHrR1sCQqRzachbo0="
# token过期时间,单位天
EXPIRES: 7
# scrapyd地址, 结尾不要加斜杆
SCRAPYD_SERVER: "http://127.0.0.1:6800"
# 日志文件夹
LOG_DIR: 'logs'

生成jwt key


$ python -c 'import base64;import os;print(base64.b64encode(os.urandom(32)).decode())'

部署优化

1、使用 Gunicorn管理应用


Gunicorn文档:https://docs.gunicorn.org/


# 启动服务
$ gunicorn --config gunicorn.conf.py spider_admin_pro.run:app

注意:


如果使用了 Gunicorn 那么 配置文件中的 PORT 和 HOST 将会不生效


如果需要修改port 和host, 需要修改gunicorn.conf.py 文件中的 bind


一个配置示例:gunicorn.conf.py


# -*- coding: utf-8 -*-
"""
$ gunicorn --config gunicorn.conf.py spider_admin_pro.run:app
"""
import multiprocessing
import os
from gevent import monkey
monkey.patch_all()
# 日志文件夹
LOG_DIR = 'logs'
if not os.path.exists(LOG_DIR):
    os.mkdir(LOG_DIR)
def resolve_file(filename):
    return os.path.join(LOG_DIR, filename)
def get_workers():
    return multiprocessing.cpu_count() * 2 + 1
# daemon = True
daemon = False  # 使用supervisor不能是后台进程
# 进程名称
proc_name = "spider-admin-pro"
# 启动端口
bind = "127.0.0.1:5001"
# 日志文件
loglevel = 'debug'
pidfile = resolve_file("gunicorn.pid")
accesslog = resolve_file("access.log")
errorlog = resolve_file("error.log")
# 启动的进程数
# workers = get_workers()
workers = 2
worker_class = 'gevent'
# 启动时钩子
def on_starting(server):
    ip, port = server.address[0]
    print('server.address:', f'http://{ip}:{port}')

注意:


使用gunicorn部署,会启动多个worker, 这样apscheduler会启动多个,可能会出现重复运行的情况(暂时没出现)


这种情况下,调度器控制开关不要动,以免启动不了;如果出现了定时任务不执行,可尝试重启整个服务


2、使用supervisor管理进程


文档:http://www.supervisord.org


spider-admin-pro.ini

[program: spider-admin-pro]
directory=/spider-admin-pro
command=/usr/local/python3/bin/gunicorn --config gunicorn.conf.py spider_admin_pro.run:app
stdout_logfile=logs/out.log
stderr_logfile=logs/err.log
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 0
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=0

3、使用Nginx转发请求


server {
    listen 80;
    server_name _;
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
    location / {
        proxy_pass         http://127.0.0.1:5001/;
        proxy_redirect     off;
        proxy_set_header   Host                 $host;
        proxy_set_header   X-Real-IP            $remote_addr;
        proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto    $scheme;
    }
}

使用扩展

收集运行日志:scrapy-util 可以帮助你收集到程序运行的统计数据


技术栈:

1、前端技术:


image.pngimage.png

image.png

image.png

项目结构

【公开仓库】基于Flask的后端项目spider-admin-pro: https://github.com/mouday/spider-admin-pro


【私有仓库】基于Vue的前端项目spider-admin-pro-web: https://github.com/mouday/spider-admin-pro-web


spider-admin-pro项目主要目录结构:


.
├── run.py        # 程序入口
├── api           # Controller层
├── service       # Sevice层
├── model         # Model层
├── exceptions    # 异常 
├── utils         # 工具类
└── web           # 静态web页

经验总结

Scrapyd 不能直接暴露在外网


其他人通过deploy部署可以将代码部署到你的机器上,如果是root用户运行,还会在你机器上做其他的事情

还有运行日志中会出现配置文件中的信息,存在信息泄露的危险

二次开发

git clone https://github.com/mouday/spider-admin-pro.git
cd spider-admin-pro
python3 dev.py

安装升级

pip3 install -U spider-admin-pro -i https://pypi.org/simple

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
2190 0
分布式爬虫框架Scrapy-Redis实战指南
|
数据采集 存储 Docker
深入理解Docker:为你的爬虫项目提供隔离环境
本教程介绍如何使用Docker构建隔离环境,运行Python爬虫项目,采集小红书视频页面的简介和评论。主要内容包括: 1. **Docker隔离环境**:通过Docker容器化爬虫,确保环境独立、易于部署。 2. **代理IP技术**:利用亿牛云爬虫代理突破反爬限制。 3. **Cookie与User-Agent设置**:伪装请求头,模拟真实用户访问。 4. **多线程采集**:提高数据采集效率。 前置知识要求:Python基础、Docker基本操作及HTML解析(可选)。教程还涵盖常见错误解决方法和延伸练习,帮助你优化爬虫代码并避免陷阱。
624 7
深入理解Docker:为你的爬虫项目提供隔离环境
|
数据采集 前端开发 JavaScript
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
|
数据采集 人工智能 监控
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
Crawl4AI 是2025年GitHub上备受瞩目的开源网络爬虫工具,专为AI时代设计。它不仅能抓取网页内容,还能理解页面语义结构,生成适配大语言模型的训练数据格式。上线半年获4万+星标,应用于1200+AI项目。其功能亮点包括智能内容提取引擎、AI就绪数据管道和企业级特性,支持动态页面处理、多语言识别及分布式部署。技术架构基于Python 3.10与Scrapy框架,性能卓越,适用于AI训练数据采集、行业情报监控等场景。相比Scrapy、BeautifulSoup等传统工具,Crawl4AI在动态页面支持、PDF解析和语义分块方面更具优势
5543 0
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
808 6
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
6917 71
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
689 0
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
数据采集 存储 监控
Java爬虫:数据采集的强大工具
在数据驱动的时代,Java爬虫技术凭借其强大的功能和灵活性,成为企业获取市场信息、用户行为及竞争情报的关键工具。本文详细介绍了Java爬虫的工作原理、应用场景、构建方法及其重要性,强调了在合法合规的前提下,如何有效利用Java爬虫技术为企业决策提供支持。
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
871 4