diff --git a/README.md b/README.md index 63a3eb4..3afdac3 100644 --- a/README.md +++ b/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 ``` diff --git a/README_en.md b/README_en.md index 09d0492..68e5a68 100644 --- a/README_en.md +++ b/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 ``` diff --git a/README_es.md b/README_es.md index 7b3b7c8..bce7d96 100644 --- a/README_es.md +++ b/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 ``` diff --git a/cmd_arg/arg.py b/cmd_arg/arg.py index 6cb2dfc..901d9ee 100644 --- a/cmd_arg/arg.py +++ b/cmd_arg/arg.py @@ -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, diff --git a/db.py b/database/db.py similarity index 100% rename from db.py rename to database/db.py diff --git a/docs/index.md b/docs/index.md index 6018b81..9c55dd2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -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 参数为兼容历史更新保留) ## 免责声明 > **免责声明:** diff --git a/docs/项目代码结构.md b/docs/项目代码结构.md index 6575977..6a5e2ed 100644 --- a/docs/项目代码结构.md +++ b/docs/项目代码结构.md @@ -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 # 全局上下文变量定义 ``` \ No newline at end of file diff --git a/main.py b/main.py index df5abb2..a822e67 100644 --- a/main.py +++ b/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 -# 原因:增加 --init-db 功能,用于数据库初始化。 +# 原因:增加 --init_db 功能,用于数据库初始化。 # 副作用:无 # 回滚策略:还原此文件。 async def main():