Python中如何为Scrapy框架开发一个管理界面?
https://github.com/DormyMo/SpiderKeeper
主要实现 scrapy 工程的部署,抓取任务状态监控,定时启动爬虫等功能
支持多个 scrapyd 服务 ,方便爬虫集群的管理
后续等功能完善了之后 想支持更多爬虫框架来着
Python中如何为Scrapy框架开发一个管理界面?
很厉害啊,用什么写的?
对于Scrapy框架的管理界面开发,我建议采用Django作为后端,通过REST API与Scrapy进行交互。下面是一个完整的实现方案:
# 1. 首先安装必要依赖
# pip install django djangorestframework scrapy
# 2. 创建Django项目和应用
# django-admin startproject scrapy_manager
# cd scrapy_manager
# python manage.py startapp spider_control
# spider_control/models.py
from django.db import models
class Spider(models.Model):
name = models.CharField(max_length=100)
project = models.CharField(max_length=100)
status = models.CharField(max_length=20, default='stopped')
last_run = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.name
# spider_control/views.py
from rest_framework import viewsets
from .models import Spider
from .serializers import SpiderSerializer
import subprocess
import threading
class SpiderViewSet(viewsets.ModelViewSet):
queryset = Spider.objects.all()
serializer_class = SpiderSerializer
def run_spider(self, spider_name):
"""异步运行爬虫"""
def run():
cmd = f'scrapy crawl {spider_name}'
subprocess.run(cmd, shell=True, cwd='/path/to/your/scrapy/project')
thread = threading.Thread(target=run)
thread.start()
return {'status': 'started', 'spider': spider_name}
# spider_control/serializers.py
from rest_framework import serializers
from .models import Spider
class SpiderSerializer(serializers.ModelSerializer):
class Meta:
model = Spider
fields = '__all__'
# spider_control/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import SpiderViewSet
router = DefaultRouter()
router.register(r'spiders', SpiderViewSet)
urlpatterns = [
path('api/', include(router.urls)),
]
# 前端界面示例 (templates/spider_control/index.html)
"""
<!DOCTYPE html>
<html>
<head>
<title>Scrapy Manager</title>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
<h1>爬虫管理界面</h1>
<div v-for="spider in spiders" :key="spider.id">
<h3>{{ spider.name }}</h3>
<p>状态: {{ spider.status }}</p>
<button @click="runSpider(spider.name)">运行</button>
</div>
</div>
<script>
const { createApp } = Vue;
createApp({
data() {
return {
spiders: []
}
},
mounted() {
this.fetchSpiders();
},
methods: {
async fetchSpiders() {
const response = await fetch('/api/spiders/');
this.spiders = await response.json();
},
async runSpider(spiderName) {
await fetch(`/api/spiders/run/${spiderName}/`, {
method: 'POST'
});
alert('爬虫已启动');
}
}
}).mount('#app');
</script>
</body>
</html>
"""
# 3. 创建Scrapy项目集成脚本
# scrapy_integration.py
import os
import json
from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerRunner
from twisted.internet import reactor
def get_spider_list(project_path):
"""获取Scrapy项目中的所有爬虫"""
os.chdir(project_path)
from scrapy.utils.spider import iter_spider_classes
from scrapy import spiderloader
from scrapy.utils.project import get_project_settings
settings = get_project_settings()
spider_loader = spiderloader.SpiderLoader.from_settings(settings)
spiders = spider_loader.list()
return [spider for spider in spiders]
# 4. 在Django中集成
# spider_control/management/commands/sync_spiders.py
from django.core.management.base import BaseCommand
from spider_control.models import Spider
class Command(BaseCommand):
help = '同步Scrapy项目中的爬虫到数据库'
def handle(self, *args, **options):
from scrapy_integration import get_spider_list
spiders = get_spider_list('/path/to/your/scrapy/project')
for spider_name in spiders:
Spider.objects.get_or_create(
name=spider_name,
defaults={'project': 'my_scrapy_project'}
)
self.stdout.write(f'同步了 {len(spiders)} 个爬虫')
这个方案的核心思路是:用Django提供管理界面和API,通过子进程调用Scrapy命令来运行爬虫。前端可以用Vue/React等框架实现交互界面,后端通过Django REST Framework提供API。
建议:用Django+DRF搭建管理后台,通过API控制Scrapy进程。
flask
看着比 scrapyd 要好用…
v2 上真是爬虫玩家多 而且高端玩家多
怒赞。
windows 系统可以用不?
第 111 个赞
应该可以,没测试过
👍
ui 可以的
哈哈,前排支持
先赞一个!
楼主强大,做成了我一直想做但却做不成的事,前排支持,然后给星
非常好用!
作者的 Issues 回复的也很快
请问,上传那个 egg 是 build-egg 生成的 egg,还是 scrapyd-deploy 成功之后自己生成的那个 egg 文件
爬出来的数据放在 dbs 里面的 sqlite 数据库了吗?可是用可视化工具读不出来数据。
不错,就是删除任务再新建,会提示达到最大工作量,而且人物也删除不掉
我想知道你是用了什么 python 的管理框架吗。

