refactor(database): 调整数据库模块位置、调整初始化arg名称,并更新文档

- 将 db.py 数据库模块移入‘database/‘中,并修正所有调用代码
- 将初始化参数 `--init-db` 改为 `--init_db`
- 更新相关文档说明
This commit is contained in:
persist-1
2025-09-08 01:14:31 +08:00
parent 99756612b4
commit d3bebd039e
8 changed files with 129 additions and 67 deletions

View File

@@ -196,21 +196,29 @@ python main.py --help
## 💾 数据保存
支持多种数据存储方式:
- **SQLite 数据库**:轻量级数据库,无需服务器,适合个人使用(推荐)
- 参数:`--save_data_option sqlite`
- 自动创建数据库文件
- **MySQL 数据库**:支持关系型数据库 MySQL 中保存(需要提前创建数据库)
- 执行 `python db.py` 初始化数据库表结构(只在首次执行)
- **CSV 文件**:支持保存到 CSV 中(`data/` 目录下)
- **JSON 文件**:支持保存到 JSON 中(`data/` 目录下)
- **数据库存储**
- 使用参数 `--init_db` 进行数据库初始化(使用`--init_db`时不需要携带其他optional
- **SQLite 数据库**:轻量级数据库,无需服务器,适合个人使用(推荐)
1. 初始化:`--init_db sqlite`
2. 数据存储:`--save_data_option sqlite`
- **MySQL 数据库**:支持关系型数据库 MySQL 中保存(需要提前创建数据库)
1. 初始化:`--init_db mysql`
2. 数据存储:`--save_data_option db`db 参数为兼容历史更新保留)
### 使用示例:
```shell
# 使用 SQLite(推荐个人用户使用
# 初始化 SQLite 数据库(使用'--init_db'时不需要携带其他optional
uv run main.py --init_db sqlite
# 使用 SQLite 存储数据(推荐个人用户使用)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite
# 使用 MySQL
```
```shell
# 初始化 MySQL 数据库
uv run main.py --init_db mysql
# 使用 MySQL 存储数据为适配历史更新db参数进行沿用
uv run main.py --platform xhs --lt qrcode --type search --save_data_option db
```

View File

@@ -194,21 +194,29 @@ python main.py --help
## 💾 Data Storage
Supports multiple data storage methods:
- **SQLite Database**: Lightweight database without server, ideal for personal use (recommended)
- Parameter: `--save_data_option sqlite`
- Database file created automatically
- **MySQL Database**: Supports saving to relational database MySQL (need to create database in advance)
- Execute `python db.py` to initialize database table structure (only execute on first run)
- **CSV Files**: Supports saving to CSV (under `data/` directory)
- **JSON Files**: Supports saving to JSON (under `data/` directory)
- **Database Storage**
- Use the `--init_db` parameter for database initialization (when using `--init_db`, no other optional arguments are needed)
- **SQLite Database**: Lightweight database, no server required, suitable for personal use (recommended)
1. Initialization: `--init_db sqlite`
2. Data Storage: `--save_data_option sqlite`
- **MySQL Database**: Supports saving to relational database MySQL (database needs to be created in advance)
1. Initialization: `--init_db mysql`
2. Data Storage: `--save_data_option db` (the db parameter is retained for compatibility with historical updates)
### Usage Examples:
```shell
# Use SQLite (recommended for personal users)
# Initialize SQLite database (when using '--init_db', no other optional arguments are needed)
uv run main.py --init_db sqlite
# Use SQLite to store data (recommended for personal users)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite
# Use MySQL
```
```shell
# Initialize MySQL database
uv run main.py --init_db mysql
# Use MySQL to store data (the db parameter is retained for compatibility with historical updates)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option db
```

View File

@@ -194,21 +194,29 @@ python main.py --help
## 💾 Almacenamiento de Datos
Soporta múltiples métodos de almacenamiento de datos:
- **Base de Datos SQLite**: Base de datos ligera sin servidor, ideal para uso personal (recomendado)
- Parámetro: `--save_data_option sqlite`
- Se crea automáticamente el archivo de base de datos
- **Base de Datos MySQL**: Soporta guardar en base de datos relacional MySQL (necesita crear base de datos con anticipación)
- Ejecute `python db.py` para inicializar la estructura de tablas de la base de datos (solo ejecutar en la primera ejecución)
- **Archivos CSV**: Soporta guardar en CSV (bajo el directorio `data/`)
- **Archivos JSON**: Soporta guardar en JSON (bajo el directorio `data/`)
- **Almacenamiento en Base de Datos**
- Use el parámetro `--init_db` para la inicialización de la base de datos (cuando use `--init_db`, no se necesitan otros argumentos opcionales)
- **Base de Datos SQLite**: Base de datos ligera, no requiere servidor, adecuada para uso personal (recomendado)
1. Inicialización: `--init_db sqlite`
2. Almacenamiento de Datos: `--save_data_option sqlite`
- **Base de Datos MySQL**: Soporta guardar en la base de datos relacional MySQL (la base de datos debe crearse con anticipación)
1. Inicialización: `--init_db mysql`
2. Almacenamiento de Datos: `--save_data_option db` (el parámetro db se mantiene por compatibilidad con actualizaciones históricas)
### Ejemplos de Uso:
```shell
# Usar SQLite (recomendado para usuarios personales)
# Inicializar la base de datos SQLite (cuando use '--init_db', no se necesitan otros argumentos opcionales)
uv run main.py --init_db sqlite
# Usar SQLite para almacenar datos (recomendado para usuarios personales)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option sqlite
# Usar MySQL
```
```shell
# Inicializar la base de datos MySQL
uv run main.py --init_db mysql
# Usar MySQL para almacenar datos (el parámetro db se mantiene por compatibilidad con actualizaciones históricas)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option db
```

View File

@@ -38,7 +38,7 @@ async def parse_cmd():
parser.add_argument('--save_data_option', type=str,
help='Where to save the data / 数据保存方式 (csv=CSV文件 | db=MySQL数据库 | json=JSON文件 | sqlite=SQLite数据库)',
choices=['csv', 'db', 'json', 'sqlite'], default=config.SAVE_DATA_OPTION)
parser.add_argument('--init-db', type=str,
parser.add_argument('--init_db', type=str,
help='Initialize database schema / 初始化数据库表结构 (sqlite | mysql)',
choices=['sqlite', 'mysql'], default=None)
parser.add_argument('--cookies', type=str,

View File

@@ -54,15 +54,19 @@
python main.py --help
```
## 数据保存
- 支持关系型数据库Mysql中保存需要提前创建数据库
- 执行 `python db.py` 初始化数据库数据库表结构(只在首次执行)
- 支持轻量级SQLite数据库保存无需额外安装数据库服务器
- 本地文件数据库,适合个人使用和小规模数据存储
- 使用参数 `--save_data_option sqlite` 启用SQLite存储
- 数据库文件自动创建在项目目录下schema/sqlite_tables.db
- 支持保存到csv中data/目录下)
- 支持保存到json中data/目录下)
## 💾 数据存储
支持多种数据存储方式:
- **CSV 文件**: 支持保存至 CSV (位于 `data/` 目录下)
- **JSON 文件**: 支持保存至 JSON (位于 `data/` 目录下)
- **数据库存储**
- 使用 `--init_db` 参数进行数据库初始化 (使用 `--init_db` 时,无需其他可选参数)
- **SQLite 数据库**: 轻量级数据库,无需服务器,适合个人使用 (推荐)
1. 初始化: `--init_db sqlite`
2. 数据存储: `--save_data_option sqlite`
- **MySQL 数据库**: 支持保存至关系型数据库 MySQL (需提前创建数据库)
1. 初始化: `--init_db mysql`
2. 数据存储: `--save_data_option db` (db 参数为兼容历史更新保留)
## 免责声明
> **免责声明:**

View File

@@ -2,36 +2,70 @@
```
MediaCrawler
├── base
│ └── base_crawler.py # 项目的抽象类
├── browser_data # 换成用户的浏览器数据目录
├── config
│ ├── account_config.py # 账号代理池配置
├── base
│ └── base_crawler.py # 项目的抽象
├── cache
│ ├── abs_cache.py # 缓存抽象基类
│ ├── cache_factory.py # 缓存工厂
│ ├── local_cache.py # 本地缓存实现
│ └── redis_cache.py # Redis缓存实现
├── cmd_arg
│ └── arg.py # 命令行参数定义
├── config
│ ├── base_config.py # 基础配置
── db_config.py # 数据库配置
├── data # 数据保存目录
├── libs
── db_config.py # 数据库配置
│ └── ... # 各平台配置文件
├── constant
│ └── ... # 各平台常量定义
├── database
│ ├── db.py # 数据库ORM封装增删改查
│ ├── db_session.py # 数据库会话管理
│ └── models.py # 数据库模型定义
├── docs
│ └── ... # 项目文档
├── libs
│ ├── douyin.js # 抖音Sign函数
── stealth.min.js # 去除浏览器自动化特征的JS
── stealth.min.js # 去除浏览器自动化特征的JS
│ └── zhihu.js # 知乎Sign函数
├── media_platform
│ ├── douyin # 抖音crawler实现
│ ├── xhs # 小红书crawler实现
│ ├── bilibili # B站crawler实现
── kuaishou # 快手crawler实现
├── modles
│ ├── douyin.py # 抖音数据模型
── xiaohongshu.py # 小红书数据模型
│ ├── kuaishou.py # 快手数据模型
── bilibili.py # B站数据模型
│ ├── bilibili # B站采集实现
│ ├── douyin # 抖音采集实现
│ ├── kuaishou # 快手采集实现
── tieba # 百度贴吧采集实现
│ ├── weibo # 微博采集实现
│ ├── xhs # 小红书采集实现
── zhihu # 知乎采集实现
├── model
── m_baidu_tieba.py # 百度贴吧数据模型
│ ├── m_douyin.py # 抖音数据模型
│ ├── m_kuaishou.py # 快手数据模型
│ ├── m_weibo.py # 微博数据模型
│ ├── m_xiaohongshu.py # 小红书数据模型
│ └── m_zhihu.py # 知乎数据模型
├── proxy
│ ├── base_proxy.py # 代理基类
│ ├── providers # 代理提供商实现
│ ├── proxy_ip_pool.py # 代理IP池
│ └── types.py # 代理类型定义
├── store
│ ├── bilibili # B站数据存储实现
│ ├── douyin # 抖音数据存储实现
│ ├── kuaishou # 快手数据存储实现
│ ├── tieba # 贴吧数据存储实现
│ ├── weibo # 微博数据存储实现
│ ├── xhs # 小红书数据存储实现
│ └── zhihu # 知乎数据存储实现
├── test
│ ├── test_db_sync.py # 数据库同步测试
│ ├── test_proxy_ip_pool.py # 代理IP池测试
│ └── ... # 其他测试用例
├── tools
│ ├── utils.py # 暴露给外部的工具函数
│ ├── crawler_util.py # 爬虫相关的工具函数
│ ├── slider_util.py # 滑块相关的工具函数
│ ├── time_util.py # 时间相关的工具函数
── easing.py # 模拟滑动轨迹相关的函数
| └── words.py # 生成词云图相关的函数
├── db.py # DB ORM
── main.py # 程序入口
├── var.py # 上下文变量定义
└── recv_sms_notification.py # 短信转发器的HTTP SERVER接口
│ ├── browser_launcher.py # 浏览器启动器
│ ├── cdp_browser.py # CDP浏览器控制
│ ├── crawler_util.py # 爬虫工具函数
│ ├── utils.py # 通用工具函数
── ...
├── main.py # 程序入口, 支持 --init_db 参数来初始化数据库
├── recv_sms.py # 短信转发HTTP SERVER接口
── var.py # 全局上下文变量定义
```

View File

@@ -15,7 +15,7 @@ from typing import Optional
import cmd_arg
import config
import db
from database import db
from base.base_crawler import AbstractCrawler
from media_platform.bilibili import BilibiliCrawler
from media_platform.douyin import DouYinCrawler
@@ -51,7 +51,7 @@ crawler: Optional[AbstractCrawler] = None
# persist-1<persist1@126.com>
# 原因:增加 --init-db 功能,用于数据库初始化。
# 原因:增加 --init_db 功能,用于数据库初始化。
# 副作用:无
# 回滚策略:还原此文件。
async def main():