mirror of
https://github.com/dataabc/weibo-crawler.git
synced 2026-10-29 14:09:56 +08:00
- 本轮存档核对与全量存档核对(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 项用例
162 lines
12 KiB
JSON
162 lines
12 KiB
JSON
{
|
||
|
||
// ==================== 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": "" // 接口令牌
|
||
}
|
||
}
|