mirror of
https://github.com/NanmiCoder/MediaCrawler.git
synced 2025-11-25 11:29:27 +08:00
refactor(database): 调整数据库模块位置、调整初始化arg名称,并更新文档
- 将 db.py 数据库模块移入‘database/‘中,并修正所有调用代码 - 将初始化参数 `--init-db` 改为 `--init_db` - 更新相关文档说明
This commit is contained in:
26
README.md
26
README.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
26
README_en.md
26
README_en.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
26
README_es.md
26
README_es.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 参数为兼容历史更新保留)
|
||||
|
||||
## 免责声明
|
||||
> **免责声明:**
|
||||
|
||||
@@ -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 # 全局上下文变量定义
|
||||
```
|
||||
4
main.py
4
main.py
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user