feat: 新增 JSONL 存储格式支持,默认存储格式改为 jsonl

JSONL(JSON Lines)每行一个 JSON 对象,采用 append 模式写入,
无需读取已有数据,大数据量下性能远优于 JSON 格式。

- 新增 AsyncFileWriter.write_to_jsonl() 核心方法
- 7 个平台新增 JsonlStoreImplement 类并注册到工厂
- 配置默认值从 json 改为 jsonl,CLI/API 枚举同步更新
- db_session.py 守卫条件加入 jsonl,避免误触 ValueError
- 词云生成支持读取 JSONL 文件,优先 jsonl 回退 json
- 原有 json 选项完全保留,向后兼容
- 更新相关文档和测试
This commit is contained in:
程序员阿江(Relakkes)
2026-03-03 23:31:07 +08:00
parent 4331b91fe1
commit 0282e626c9
29 changed files with 245 additions and 47 deletions

View File

@@ -9,6 +9,7 @@ MediaCrawler 支持多种数据存储方式,您可以根据需求选择最适
- **CSV 文件**:支持保存到 CSV 中(`data/` 目录下)
- **JSON 文件**:支持保存到 JSON 中(`data/` 目录下)
- **JSONL 文件**:支持保存到 JSONL 中(`data/` 目录下)— 默认格式,每行一个 JSON 对象,追加写入性能好
- **Excel 文件**:支持保存到格式化的 Excel 文件(`data/` 目录下)✨ 新功能
- 多工作表支持(内容、评论、创作者)
- 专业格式化(标题样式、自动列宽、边框)
@@ -57,6 +58,9 @@ uv run main.py --platform xhs --lt qrcode --type search --save_data_option csv
# 使用 JSON 存储数据
uv run main.py --platform xhs --lt qrcode --type search --save_data_option json
# 使用 JSONL 存储数据(默认格式,无需指定)
uv run main.py --platform xhs --lt qrcode --type search --save_data_option jsonl
```
#### 详细文档

View File

@@ -34,7 +34,7 @@ pip install openpyxl
1. **Configure Excel export** in `config/base_config.py`:
```python
SAVE_DATA_OPTION = "excel" # Change from json/csv/db to excel
SAVE_DATA_OPTION = "excel" # Change from jsonl/json/csv/db to excel
```
2. **Run the crawler**:

View File

@@ -1,14 +1,14 @@
# 关于词云图相关操作
## 1.如何正确调用词云图
> ps:目前只有保存格式为json文件时才会生成词云图。其他存储方式添加词云图将在近期添加。
> ps:保存格式为json或jsonl文件时,才会生成词云图。其他存储方式添加词云图将在近期添加。
需要修改的配置项(./config/base_config.py
```python
# 数据保存类型选项配置,支持种类型csv、db、json
#此处需要为json格式保存原因如上
SAVE_DATA_OPTION = "json" # csv or db or json
# 数据保存类型选项配置,支持种类型csv、db、json、jsonl等
#此处需要为json或jsonl格式保存,原因如上
SAVE_DATA_OPTION = "jsonl" # csv or db or json or jsonl
```
```python
@@ -54,4 +54,4 @@ FONT_PATH= "./docs/STZHONGS.TTF"
![image-20240627204928601](https://rosyrain.oss-cn-hangzhou.aliyuncs.com/img2/202406272049662.png)
如图在data文件下的`words文件夹`其中json为词频统计文件png为词云图。原本的评论内容在`json文件夹`下。
如图在data文件下的`words文件夹`其中json为词频统计文件png为词云图。原本的评论内容在`jsonl文件夹`(或`json文件夹`下。

View File

@@ -22,7 +22,7 @@ MediaCrawler 是一个多平台自媒体爬虫框架,采用 Python 异步编
- **多平台支持**:统一的爬虫接口,支持 7 大主流平台
- **多种登录方式**二维码、手机号、Cookie 三种登录方式
- **多种存储方式**CSV、JSON、SQLite、MySQL、MongoDB、Excel
- **多种存储方式**CSV、JSON、JSONL、SQLite、MySQL、MongoDB、Excel
- **反爬虫对策**CDP 模式、代理 IP 池、请求签名
- **异步高并发**:基于 asyncio 的异步架构,高效并发爬取
- **词云生成**:自动生成评论词云图
@@ -441,6 +441,7 @@ class DouyinStoreFactory:
|---------|--------|-----|---------|
| CSV | `csv` | 简单、通用 | 小规模数据、快速查看 |
| JSON | `json` | 结构完整、易解析 | API对接、数据交换 |
| JSONL | `jsonl` | 追加写入、性能好 | 大规模数据、增量爬取(默认) |
| SQLite | `sqlite` | 轻量、无需服务 | 本地开发、小型项目 |
| MySQL | `db` | 性能好、支持并发 | 生产环境、大规模数据 |
| MongoDB | `mongodb` | 灵活、易扩展 | 非结构化数据、快速迭代 |
@@ -693,7 +694,7 @@ IP_PROXY_PROVIDER = "kuaidaili"
IP_PROXY_POOL_COUNT = 2
# 存储配置
SAVE_DATA_OPTION = "json" # csv, db, json, sqlite, mongodb, excel
SAVE_DATA_OPTION = "jsonl" # csv, db, json, jsonl, sqlite, mongodb, excel, postgres
```
### 8.2 数据库配置