Files
weibo-crawler/config.json.example
YuanChen 5028047f6d feat: 新增存档核对、抓取情况报告、媒体检查与评论下载
- 本轮存档核对与全量存档核对(weibo_archive_check / weibo_archive_check_full)
- 本轮抓取情况报告(weibo_crawl_summary)
- 媒体完整性报告(weibo_media_check)
- 评论下载与 Markdown 展示(comment_fetch / comment_markdown)及评论者白名单
- 历史评论回填脚本 scripts/weibo_comment_backfill.py
- 配置迁移:旧键内存兼容,--update-config 文本级写回并保留注释
- 媒体下载加固:Content-Length 比对、文件签名校验、HTML 错误页拦截
- 文档与目录整理:API.md 移入 docs/,脚本移入 scripts/
- 测试:tests/ 下 174 项用例
2026-10-24 22:45:59 +08:00

162 lines
12 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
// ==================== 1. 账号与时间范围 ====================
"user_id_list": "user_id_list.txt", // 用户 ID 列表文件或 ID 数组;文件每行一个用户 ID,可追加起始日期、关键词
"only_crawl_original": 0, // 0 = 抓取原创+转发;1 = 只抓原创
"since_date": "2026-01-01", // 抓取起始日期:YYYY-MM-DD、YYYY-MM-DDTHH:MM:SS 或 N(N 天前)
"end_date": "", // 抓取截止日期:格式同 since_date;空 = 不限制
"start_page": 1, // 起始页码(从 1 开始),断点续传时使用
"page_weibo_count": 20, // 每页微博数:10-100,建议 10-20(过大易触发限流)
// ==================== 2. 输出与写入模式 ====================
// 输出格式,可多选:
// csv → CSV 文件
// json → JSON 文件
// mysql → MySQL 数据库
// mongo → MongoDB 数据库
// sqlite → SQLite 数据库
// post → POST 推送到接口
// markdown → Markdown 存档
"write_mode": [
"markdown",
"csv",
"json"
],
"output_directory": "weibo_data", // 数据输出目录:相对项目根或绝对路径
"user_id_as_folder_name": 0, // 0 = 用户目录用昵称;1 = 用用户 ID
"remove_html_tag": 1, // 0 = 保留 HTML 标签;1 = 移除(正文与评论转纯文本)
// ==================== 3. Markdown 存档 ====================
"markdown_split_by": "day_by_month", // 可选:day(按天)、day_by_month(按天+按月归档)、month(按月)、year(按年)、all(全部单文件)
"markdown_sort_order": "new_to_old", // 可选:new_to_old(新→旧)、old_to_new(旧→新)
"markdown_image_order": "live_photo_first", // 可选:live_photo_first(Live Photo 优先)、image_first_interleaved(图片优先)
"markdown_preview": { // md 媒体预览开关(0 = 普通链接;1 = 预览)
"link_preview": 0, // 0 = 普通链接;1 = 预览
"inline_image_preview": 1, // 0 = 普通链接;1 = 预览(正文「查看图片」)
"original_image_preview": 1, // 0 = 普通链接;1 = 预览
"retweet_image_preview": 1, // 0 = 普通链接;1 = 预览
"original_video_preview": 0, // 0 = 普通链接;1 = 预览
"retweet_video_preview": 0, // 0 = 普通链接;1 = 预览
"original_live_photo_preview": 0, // 0 = 普通链接;1 = 预览
"retweet_live_photo_preview": 0 // 0 = 普通链接;1 = 预览
},
"markdown_file_dir": { // md 内链接路径(同时决定 md 模式的图片下载目录)
"original_image_dir": "img", // 原创图片链接路径(md 内相对路径)
"retweet_image_dir": "img", // 转发图片链接路径(md 内相对路径)
"original_video_dir": "原创微博视频", // 原创视频链接路径(md 内相对路径)
"retweet_video_dir": "转发微博视频", // 转发视频链接路径(md 内相对路径)
"original_live_photo_dir": "原创微博Live Photo视频", // 原创 Live Photo 链接路径(md 内相对路径)
"retweet_live_photo_dir": "转发微博Live Photo视频", // 转发 Live Photo 链接路径(md 内相对路径)
"comment_image_dir": "评论图片" // 评论图片链接路径(md 内相对路径)
},
"download_folder_name": { // 媒体下载目录(md 模式下视频与 Live Photo 也生效)
"original_image_folder": "原创微博图片", // 原创图片下载目录名
"retweet_image_folder": "转发微博图片", // 转发图片下载目录名
"original_video_folder": "原创微博视频", // 原创视频下载目录名
"retweet_video_folder": "转发微博视频", // 转发视频下载目录名
"original_live_photo_folder": "原创微博Live Photo视频", // 原创 Live Photo 下载目录名
"retweet_live_photo_folder": "转发微博Live Photo视频", // 转发 Live Photo 下载目录名
"comment_image_folder": "评论图片" // 评论图片下载目录名
},
// ==================== 4. 媒体下载 ====================
"original_pic_download": 0, // 0 = 不下载;1 = 下载
"retweet_pic_download": 0, // 0 = 不下载;1 = 下载
"original_video_download": 0, // 0 = 不下载;1 = 下载
"retweet_video_download": 0, // 0 = 不下载;1 = 下载
"original_live_photo_download": 0, // 0 = 不下载;1 = 下载
"retweet_live_photo_download": 0, // 0 = 不下载;1 = 下载
"not_downloaded_record": 0, // 0 = 不记录;1 = 记录失败清单(下载成功后自动清理)
"not_downloaded_record_dir": "", // 失败清单位置:空或 media = 跟随媒体目录;report = 报告目录;其他 = 自定义目录
"write_time_in_exif": 1, // 0 = 不写入;1 = 把微博时间写入图片 EXIF
"change_file_time": 1, // 0 = 不修改;1 = 把媒体文件时间改为微博发布时间
// ==================== 5. 评论下载 ====================
"download_comment": 0, // 0 = 不下载;1 = 下载(含一级评论与二级回复)
"comment_max_download_count": 0, // 单条微博一级评论上限(条);0 = 不限制
"comment_reply_max_download_count": 0, // 每条一级评论的回复上限(条);0 = 不限制
"comment_pic_download": 0, // 0 = 不下载;1 = 下载
"comment_show_like_count": 0, // 0 = 不显示;1 = 显示
"comment_show_reply_target": 1, // 0 = 不显示;1 = 显示「回复 某人」
"comment_emoji_replace": 1, // 0 = 保留外链图片;1 = 替换为 [表情]
"comment_include_latest_stream": 0, // 0 = 不补充;1 = 用旧接口补「最新流」(字段少、请求多)
"comment_request_delay_min": 1, // 评论请求间隔下限(秒)
"comment_request_delay_max": 2, // 评论请求间隔上限(秒)
"comment_user_filter_file": "comment_user_filter.txt", // 评论者白名单文件:每行「微博账号 评论者1 评论者2 ...」(相对项目根)
// 内联评论者白名单(白名单文件不存在或为空时使用):
// {"微博账号ID或昵称": ["评论者ID或昵称", ...]}
// 未列出的账号 = 不过滤
"comment_user_filter": {},
"comment_markdown_backup": 0, // 0 = 不备份;1 = 写评论块前备份原 md(每文件每次运行最多一份)
// ==================== 6. 转发下载 ====================
"download_repost": 0, // 0 = 不下载;1 = 下载
"repost_max_download_count": 100, // 单条微博转发上限(条)
// ==================== 7. 报告与存档核对 ====================
"weibo_archive_check": 0, // 0 = 不生成;1 = 生成本轮存档核对报告(需 write_mode 含 markdown)
"weibo_archive_check_dir": "report", // 本轮存档核对报告目录:相对 output_directory 或绝对路径
"weibo_archive_check_full": 0, // 0 = 禁用;1 = 允许运行全量存档核对脚本 scripts/weibo_archive_check_full.py
"weibo_archive_check_full_dir": "report", // 全量存档核对报告目录:相对 output_directory 或绝对路径
"weibo_crawl_summary": 0, // 0 = 不生成;1 = 生成本轮抓取情况报告(需 write_mode 含 markdown)
"weibo_crawl_summary_dir": "report", // 本轮抓取情况报告目录:相对 output_directory 或绝对路径
"weibo_media_check": 0, // 0 = 不生成;1 = 生成媒体完整性报告(需 write_mode 含 markdown)
"weibo_media_check_dir": "report", // 媒体完整性报告目录:相对 output_directory 或绝对路径
"weibo_comment_summary": 0, // 0 = 不生成;1 = 生成评论下载情况报告(需评论下载开启)
"weibo_comment_summary_dir": "report", // 评论下载情况报告目录:相对 output_directory 或绝对路径
"weibo_comment_backfill": 0, // 0 = 禁用;1 = 允许运行历史评论回填脚本 scripts/weibo_comment_backfill.py
"weibo_comment_backfill_dir": "report", // 回填报告与进度目录:相对 output_directory 或绝对路径
"invisible_weibo_dirs": [ // 已确认不可见的微博目录名列表(不参与核对,正常爬取也不写入)
"已不可见"
],
// ==================== 8. 网络与 Cookie ====================
"cookie": "YOUR_WEIBO_COOKIE_HERE", // 微博 Cookie(必填):SCF=...; SUB=...; SUBP=...
"anti_ban_config": { // 反封禁与请求限速
"enabled": true, // true = 启用;false = 禁用
"max_weibo_per_session": 500, // 单次运行最大微博数(条)
"batch_size": 50, // 每批微博数(条)
"batch_delay": 30, // 批次间隔(秒)
"request_delay_min": 8, // 请求间隔下限(秒)
"request_delay_max": 15, // 请求间隔上限(秒)
"max_session_time": 600, // 单次运行最长时间(秒)
"max_api_errors": 5, // 连续 API 错误上限(次)
"rest_time_min": 180, // 触发休息时的最短休息时间(秒)
"random_rest_probability": 0.01, // 额外随机休息概率(0-1)
"user_agents": [ // 随机 User-Agent 列表
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Linux; Android 14; SM-S9180) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.113 Mobile Safari/537.36"
],
"accept_languages": [ // 随机 Accept-Language 列表
"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7",
"zh-TW,zh;q=0.9,en;q=0.8"
],
"referer_list": [ // 随机 Referer 列表
"https://m.weibo.cn/",
"https://weibo.com/",
"https://www.weibo.com/"
]
},
// ==================== 9. 数据库与第三方服务(可选) ====================
"sqlite_db_path": "weibodata.db", // SQLite 文件路径(write_mode 含 sqlite 时生效)
"store_binary_in_sqlite": 0, // SQLite 媒体存储:0 = 只存路径;1 = 存二进制(文件会很大)
"mysql_config": { // MySQL 连接(write_mode 含 mysql 时生效)
"host": "localhost", // 主机地址
"port": 3306, // 端口
"user": "root", // 用户名
"password": "123456", // 密码
"charset": "utf8mb4" // 字符集
},
// MongoDB 连接串(write_mode 含 mongo 时生效)
"mongodb_URI": "mongodb://[username:password@]host[:port][/[defaultauthdb][?options]]",
"post_config": { // POST 推送接口(write_mode 含 post 时生效)
"api_url": "https://api.example.com", // 接口地址
"api_token": "" // 接口令牌
}
}