好的,我已经为您整理了关于磁力链接自动抓取机器人程序的整个技术方案,并准备了相应的 docker-compose.yml
内容。
由于我是一个文本AI,无法直接为您生成并提供文件下载链接。但是,您可以将下面提供的内容复制粘贴到一个文本编辑器中(如VS Code, Sublime Text, Notepad++等),然后将文件保存为 README.md
或其他您喜欢的 Markdown 文件名。
磁力链接自动抓取机器人程序 - Docker 化部署方案
本项目旨在构建一个多容器的磁力链接自动抓取与管理系统。通过将不同功能解耦为独立的 Docker 容器,实现环境隔离、部署一致性、可伸缩性及更好的资源管理。
1. 核心架构概述
本系统采用微服务架构,核心组件包括:
- Redis: 作为消息队列,解耦爬虫与解析器。
- PostgreSQL: 关系型数据库,用于持久化存储所有抓取和解析后的磁力链接数据。
- qBittorrent: 核心服务,利用其强大的 P2P 网络(DHT/Tracker)连接能力,通过 Web UI API 获取磁力链接的元数据(文件名、大小等)。
- Scrapy 抓取器: 网络爬虫,负责从指定网站抓取原始磁力链接。
- Magnet 解析器: 处理抓取到的磁力链接,调用 qBittorrent API 获取元数据,并进行数据清洗和存储。
- Web UI: 提供一个用户友好的网页界面,展示已处理的磁力链接信息。
2. 各容器职责与技术栈
2.1 Redis 容器 (Message Queue)
- 职责: 提供高性能的消息队列服务,用于 Scrapy 抓取器和 Magnet 解析器之间的异步通信。Scrapy 将抓取到的原始磁力链接放入队列,解析器从队列中消费。
- 镜像:
redis:7-alpine
(轻量级 Redis 镜像) - 持久化: 通过数据卷
/data
持久化 Redis 数据。
2.2 PostgreSQL 容器 (Database)
- 职责: 存储所有抓取、解析并结构化后的磁力链接数据,包括标题、文件名、大小、图片 URL、来源 URL、抓取时间等。
- 镜像:
postgres:15-alpine
(PostgreSQL 官方轻量级镜像) - 持久化: 通过数据卷
/var/lib/postgresql/data
持久化数据库数据。 - 配置: 环境变量设置数据库名、用户名和密码。
2.3 qBittorrent 容器 (Magnet Metadata Resolver)
- 职责: 作为核心元数据解析服务。它运行 qBittorrent 客户端,自动连接 P2P 网络获取磁力链接的元数据。其他容器通过调用其 Web UI API 获取这些信息。
- 镜像:
linuxserver/qbittorrent:latest
(推荐,功能完善且维护良好) - API 接口: 提供 Web UI API,供 Magnet 解析器调用。
- 配置: 环境变量设置 Web UI 端口、用户名、密码、用户 ID/组 ID (PUID/PGID) 等。
- 持久化: 通过数据卷
/config
持久化配置,/downloads
作为 qBittorrent 的下载目录(即使不实际下载文件也需要)。
2.4 Scrapy 抓取容器 (Scraper)
- 职责: 模拟用户行为访问目标网站,抓取页面内容,并从中提取原始磁力链接字符串以及页面上可见的相关信息(如标题、初步描述、页面图片 URL)。
- 技术栈: Python, Scrapy 框架,
requests
,BeautifulSoup4
/lxml
。 - 数据流: 将抓取到的原始数据推送到 Redis 消息队列。
- 反爬: 可在内部实现 User-Agent 轮换、请求延迟等基本反爬策略。
- 镜像: 需要您基于 Python 官方镜像 (
python:3.x-slim-buster
) 自行构建 Dockerfile。
2.5 Magnet 解析与处理容器 (Parser)
- 职责: 从 Redis 消息队列中获取原始磁力链接,然后通过调用 qBittorrent 容器的 Web UI API,请求 qBittorrent 解析该磁力链接的元数据。一旦元数据获取成功(包含准确的文件名、大小、文件结构),将结构化数据存储到 PostgreSQL 数据库。
- 技术栈: Python,
requests
(或更推荐的qbittorrent-api
库,简化与 qBittorrent API 交互)。 - 交互逻辑: 涉及向 qBittorrent API 添加磁力链接、轮询其解析状态、获取元数据后清理 qBittorrent 中的任务。
- 镜像: 需要您基于 Python 官方镜像 (
python:3.x-slim-buster
) 自行构建 Dockerfile。
2.6 页面显示容器 (Web UI)
- 职责: 提供一个用户友好的网页界面,展示 PostgreSQL 中存储的已抓取和解析的磁力链接数据,并可能提供搜索、过滤、排序等功能。
- 技术栈: Python (Flask/Django), HTML/CSS/JavaScript (前端框架如 React/Vue 可选)。
- 数据流: 从 PostgreSQL 数据库读取数据并渲染到 Web 页面。
- 镜像: 需要您基于 Python 官方镜像 (
python:3.x-slim-buster
) 或其他 Web 服务器镜像(如nginx
+ 您的前端静态文件)自行构建 Dockerfile。
3. docker-compose.yml
配置示例
以下是整个系统的 docker-compose.yml
文件内容。请将其保存为 docker-compose.yml
文件,并根据您的实际需求和敏感信息进行修改。
1 | version: '3.8' |
4. 如何部署
- 创建项目目录结构:
1
2
3
4
5
6
7
8
9
10
11my_magnet_project/
├── docker-compose.yml
├── scraper/
│ └── Dockerfile
│ └── (你的 Scrapy 项目代码)
├── parser/
│ └── Dockerfile
│ └── (你的 Python 解析器代码)
├── web_ui/
│ └── Dockerfile
│ └── (你的 Web 应用代码) - 在各自的服务目录 (
scraper
,parser
,web_ui
) 中创建Dockerfile
: 这些文件将定义如何构建每个服务的 Docker 镜像。请根据您选择的技术栈和代码内容编写这些Dockerfile
。 - 在
docker-compose.yml
中替换占位符:your_strong_password
your_qb_password
PUID
,PGID
,TZ
- 打开终端,导航到
my_magnet_project
目录: - 运行 Docker Compose:这会构建所有自定义镜像(如果它们不存在),然后启动并运行所有定义的容器。
1
docker-compose up -d
- 访问应用: 一旦所有容器启动成功,您就可以通过浏览器访问
http://localhost:80
(Web UI 端口) 和http://localhost:8080
(qBittorrent Web UI)。
这个多容器方案提供了一个强大且灵活的平台,用于构建您的磁力链接自动抓取机器人程序。
本文作者:Samjoe Yang
本文链接: https://need.uno/duo-rong-qi-ci-li-jie-xi-xi-tong-bu-shu-shi-li/
版权声明:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论