MediaCrawler

请输入访问密码

{{ loginError }}

MediaCrawler

Dashboard Control Panel

{{ batchStatus.status === 'running' ? '本页批量·爬取中' : batchStatus.status === 'completed' ? '已完成' : '本页批量·空闲' }}
其它入口·batch 运行中
🔐

登录管理

管理小红书 Session,确保爬虫正常运行

{{ sessionStatus.browser_data_exists ? '🟢' : '⚪' }}
浏览器数据
{{ sessionStatus.browser_data_exists ? sessionStatus.browser_data_size_mb + ' MB' : '未创建' }}
{{ crawlUiBusy ? '🔄' : '⏹️' }}
爬取活动
{{ crawlUiBusy ? '运行中' : '未运行' }}

与顶部「本页批量 / 其它 batch」同源,随批量状态每 5 秒刷新;多 worker 时勿与旧版「仅 session 接口」对比。

{{ (sessionStatus.browser_data_exists || sessionStatus.config_cookie_raw) ? '🟢' : '⚪' }}
登录态
{{ (sessionStatus.browser_data_exists || sessionStatus.config_cookie_raw) ? '已保存' : '未配置' }}
📱

扫码登录

当 session 过期时,点击下方按钮打开扫码登录页面。扫码成功后,浏览器会自动保存 session,后续爬取无需再次登录

将在新窗口打开登录页面
🍪

手动更新 Cookie

备用方案

可粘贴浏览器里复制的整段 Cookie(推荐,含 a1、web_session 等);也可只填 web_session 的十六进制串。提交后会写入 config、xhs_cookies.json 并尝试加入 Session 池。

当前 config cookie: {{ sessionStatus.config_cookie }}
🔑

Session 池

{{ spStats.active }} 可用 / {{ spStats.total }} 总计

添加时若与当前 data/cookies/xhs_cookies.jsonweb_session 一致,服务端会自动写入完整 cookie_str + b1(建议先扫码再入池)。

# 备注 web_session Cookie 状态 成功 失败 操作
{{ i + 1 }} {{ s.label || '-' }} {{ s.web_session.substring(0, 12) }}... 完整 仅ws {{ s.status === 'active' ? '可用' : s.status === 'cooldown' ? '冷却' : '过期' }} {{ s.success_count }} {{ s.fail_count }}
暂无 session,请添加
💡

自动化机制说明

自动续期:爬虫启动时使用 Playwright 持久化浏览器上下文(browser_data 目录),在爬取过程中浏览器会自动刷新 session,无需人工干预。

智能登录:爬虫启动时会自动检查:①浏览器持久化 session → ②config cookie → ③扫码登录,逐级降级,优先使用最新的有效 session。

日常维护:正常情况下只需首次扫码一次。如果长时间(数天)不运行爬虫导致 session 过期,再扫码一次即可。

🔍

爬取设置

配置爬取平台、模式和目标

📋

爬取模式

全量模式:爬取所有作品,不限日期

日期范围模式:只爬取 {{ config.batch_crawl.date_start || '?' }} ~ {{ config.batch_crawl.date_end || '?' }} 范围内的作品

增量模式:已完成的作者仅爬取上次之后的新内容,已有作品只更新互动量

📦

增量配置备份

导出配置:仅全局配置(反爬、爬取设置等)。导出增量配置:配置 + 批量进度 + 各作者进度,便于备份或换机恢复;恢复时使用「导入完整配置」选择导出的 JSON。

点赞 / 收藏 / 评论 三项满足任一即写入爬取结果(OR,无需同时满足)。某项填 0 表示不以该项为条件;三项都为 0 则回退到「批量爬取」里的互动量之和阈值。

多关键词组合为一个搜索(如 A,B,C → 搜索「A B C」)

此处填写的链接用于「开始爬取」按钮的单次爬取,与批量爬取的作者列表互不影响

暂无作者,请在「批量爬取」页面添加
{{ i + 1 }}. {{ c.name }} {{ c.url }}
💬

评论设置

开启后会获取作品评论

🛡️

反爬策略

调整等待时间、伪装行为等防检测参数

⏱️

随机等待

⏸️

批次暂停

📈

动态调整

封禁时超级休眠 ({{ (config['动态调整策略'].super_sleep_min_sec/60).toFixed(0) }}~{{ (config['动态调整策略'].super_sleep_max_sec/60).toFixed(0) }} 分钟)
🎭

假动作

{{ (config['假动作策略'].probability * 100).toFixed(0) }}%
🔄

并发控制

建议 2~3,过高触发反爬

🌐

浏览器指纹

📦

批量爬取

从 Excel 读取作者列表,逐个爬取并导出

👤 创作者批量爬取 — 本页作者列表只读下方全局配置里的「Excel 路径」(保存于 anti_crawl_config),与左侧「根据账号主页监控高热笔记」里每个任务单独的 Excel 完全无关;两页文件名不同是正常的。
与「按关键词搜索热度笔记」也不同入口,互不影响。

对应 batch_progress_{{ config.batch_crawl?.task_id || 'xxx' }}.json,快照也按此 ID

相对项目根,例如 data/xiaohongshu/excel/xinmeiti.xlsx;仅写 xinmeiti.xlsx 表示根目录下该文件,与导出目录无关。

上次刷新列表实际读取:{{ creatorsExcelResolved }}

{{ creatorsPathNote }}

增量=仅爬上次之后的新内容

点赞+评论+收藏,0=不过滤

📊

飞书 & 通知(留空用全局配置)

留空=跟随全局

👥

Excel 作者列表

{{ creators.length }} 个

刷新与添加/编辑/删除均按上方「Excel 路径」输入框(相对项目根);留空则读已保存配置。若名单仍不对,请看输入框下方绿色路径是否指向你期望的磁盘文件。

#名称ID链接操作
{{ i + 1 }} {{ c.name }} {{ c.id }} {{ c.url.substring(0, 55) }}...
点击刷新加载作者列表
🚀

执行控制

📸

进度快照

每次爬取完成后自动保存。增量爬取前可导入快照恢复基线日期

暂无快照,爬取完成后会自动保存,也可点击「导出当前快照」手动创建
{{ cp.created_at }} {{ cp.note || cp.checkpoint_id }}
作者: {{ cp.summary?.total_authors || 0 }} 完成: {{ cp.summary?.completed || 0 }} 笔记: {{ cp.summary?.total_notes || 0 }} 飞书表格
快照详情 {{ cpDetail.data?.checkpoint_id }}
创建: {{ cpDetail.data.created_at }} Task: {{ cpDetail.data.task_id }} {{ cpDetail.data.note }}
{{ cpDetail.data.summary?.total_authors || 0 }}
作者总数
{{ cpDetail.data.summary?.completed || 0 }}
已完成
{{ cpDetail.data.summary?.failed || 0 }}
失败
{{ cpDetail.data.summary?.total_notes || 0 }}
笔记总数
作者 ID 状态 最后爬取日期 最新笔记 笔记数 已爬取
{{ uid.substring(0, 16) }}... {{ info.status }} {{ info.last_crawl_date || '-' }} {{ info.latest_note_date || '-' }} {{ info.contents_count || 0 }} {{ info.crawled_count || 0 }}
👤

根据账号主页监控高热笔记

从小红书复制作者主页链接填入下方,注意填写规范:以 http 为开头的完整链接

从小红书复制作者主页链接填入下方,注意填写规范:以 http 为开头的完整链接

{{ btEditId ? '编辑多作者任务' : '创建新多作者任务' }}

基础信息
作者来源

相对项目根目录或绝对路径;须含「小红书账号」Sheet

若此处有任意有效链接,启动任务时只爬这些链接,不再按 Excel 整表人数跑;Excel 仍可填,用于飞书「结果字段」定义。只想按 Excel 全员爬请清空本框

会读取该目录下所有 .xlsx,按「小红书账号」Sheet 合并作者,同一主页链接只保留一条

在此维护作者列表(保存进任务 JSON,启动时写入临时文件)。也可一键从「批量爬取」当前列表导入。

用于读取「需要的结果字段」Sheet;不填则飞书非 pipeline 场景可为空

# 名称 ID 链接 操作
{{ i + 1 }} {{ c.name }} {{ c.id }} {{ c.url }}

暂无作者,请添加或从批量页导入

爬取策略

与飞书的关系:下面「爬取模式 / 复用历史 / 断点续爬」决定从小红书抓什么、是否用本地 JSON 短路。飞书里「复用同一 Base / 仅写汇总表」只决定写进哪本表、如何追加去重不会改变你是不是重新打开浏览器爬作者主页。

新建任务怎么选:

  • 日常增量同步飞书 → 模式选 增量更新,断点续爬;「复用历史」可按需(有本地完整 JSON 时可减少重复请求)。
  • 全量模式但不想重抓已完成的作者全量爬取 + 断点续爬:进度里已完成的会跳过;若关「复用历史」且作者未完成,才会从平台继续拉。
  • 尽量从零重新抓(真全量)全量爬取 + 关闭「复用历史数据」 + 关闭「断点续爬」(否则批量进度里已完成的作者仍会被跳过);更干净的做法是新建多作者任务(独立 task_id / 独立进度文件)再跑。
{{ btCrawlStrategyHint }}

全量 = 列表策略名;是否重抓还看「复用历史」「断点续爬」与进度。

格式: 2025-01-01,填写后忽略各作者历史日期

爬所有页面以更新已有笔记的互动数据

开:若本地已有该作者完整历史 JSON,可能不重新打开浏览器整站重抓,直接复用磁盘数据再过滤/写飞书。

飞书写入

复用 Base / 汇总表追加,只影响飞书写入与去重;是否在平台「真全量重爬」由上方爬取模式 + 复用历史 + 断点续爬决定。

开启:用下方 Base Token 写入已有表格(与仪表盘「飞书配置」里「复用已有多维表格」同义)。关闭:本次运行新建多维表格;Token 仍可填写并保存,供下次开启复用。

对应链接 https://xxx.feishu.cn/base/此处Token?table=...

已填写 {{ btForm.feishu_reuse_app_token.length }} 位:{{ btTruncateToken(btForm.feishu_reuse_app_token) }}(悬停输入框可看完整)

开启后,每次点「启动」用当时时间生成 YYYYMMDD_HHMMSS,写入周期表名;下方手动后缀在本次运行中会被忽略。

关闭「自动生成」时生效;也可全留空走 batch_crawler 默认推断(含当前时间)

仅当手动后缀为空、且未开自动生成时参与推断

跳过各作者独立分表

开启后由独立服务写入飞书「作者粉丝」表,与笔记/汇总流水线互斥;关闭则仍走上方笔记飞书逻辑(受「仅写入汇总表」等影响)。

与全局 feishu.author_fans_service 语义一致;保存任务后写入 runtime 覆盖。

通知覆盖
导出设置

{{ btFilterStatus === 'all' ? '暂无多作者任务,点击右上角创建' : '当前筛选无结果' }}

{{ t.name || t.task_id }} {{ t.task_id }}
作者·手动 {{ (t.creators && t.creators.length) ? t.creators.length + ' 人' : '' }} 作者·文件夹 {{ t.excel_folder_path || '' }} 📄 {{ t.excel_path }} 链接 {{ t.creator_urls.length }} 条 🔄 {{ {full:'全量',date_range:'日期范围',incremental:'增量'}[t.crawl_mode] || t.crawl_mode }} 📊 复用 Base: {{ btTruncateToken(t.feishu_reuse_app_token) }} 📊 启动时新建 Base{{ t.feishu_reuse_app_token ? '(已保存 Token 备复用)' : '' }} 📊 未配置 Base Token(将新建) 周期后缀·每次自动生成 👥 作者粉丝表 🕐 {{ t.last_run_at }}

{{ t.notes }}

任务日志 — {{ btLogView.task_id }}

{{ btLogView.status || '...' }}
等待日志...
{{ l.timestamp }} {{ l.message }}
🔎

按关键词搜索热度笔记

按照你想要搜索的关键词进行数据爬取,注意填写规范:#关键词

按照你想要搜索的关键词进行数据爬取,注意填写规范:#关键词

{{ taskEditId ? '编辑任务' : '创建新任务' }}

组合为一个搜索(A,B,C → A B C)

有日期过滤时建议选「最新排序」

条笔记(默认 80)

只保留此日期及之后发布的笔记

只保留此日期及之前发布的笔记

穷尽翻页(日期范围内):一直翻到搜索无更多页,再排序取 Top N(耗时更长,候选池更大)

0 = 不限制页数(仅依赖接口 has_more)。建议 200~1000。

填 60:在候选池内按点赞(或开启最低互动后按赞+藏+评)排序,每词保留 top 60。未开「穷尽翻页」时,候选池最多约「每词爬取上限」或 3×N 条。

点赞 / 收藏 / 评论 三项满足任一即写入爬取结果。某项填 0 表示不以该项为条件;三项都为 0 时才使用下方最低互动数。

仅当点赞 / 收藏 / 评论三项都为 0 时生效;保留点赞+收藏+评论达到该值的笔记。

⚠ 小红书搜索 API 不支持按日期筛选,实际会先爬取再按发布时间过滤,建议适当增大爬取数量以获得足够的有效数据

⚠ 开始日期晚于结束日期,范围内无有效日期,可能一条都留不下,请修改

⚠ 结束日期晚于今天,实际只保留到今天为止的笔记

组合为一个搜索(A,B,C → A B C)

按热度搜索,自动按点赞量排序取 Top N

搜多少条 (每页≈20, 如60=3页)

按赞排序后, 前 M 篇爬评论

每篇笔记爬几页评论 (每页≈20条)

示例:小学&数学, 网课|在线 → 同时含「小学」和「数学」,或含「网课」或「在线」

默认匹配标题、正文、标签。可扩展到评论和作者简介:

📊

飞书 & 通知(留空用全局配置)

留空=跟随全局「飞书配置」

:写入下方 Base Token 或全局上次搜索表;:本次运行新建 Base。

留空且开启复用时,使用全局「关键词搜索复用」或上次搜索创建的 Base。

从飞书文件夹 URL 获取,如 https://xxx.feishu.cn/drive/folder/XxxFolderToken

留空=跟随全局;开启=转移给下方 Open ID;关闭=不转移

任务完成后飞书消息发到此群,分任务可指定不同群

自定义机器人 Webhook,填后优先用此 URL 发完成通知

暂无任务

点击右上角"新建任务"开始

{{ t.name || t.task_id }}

{{ t.platform }} {{ t.crawler_type === 'search' ? '搜索' : t.crawler_type === 'search_top' ? '高赞搜索' : t.crawler_type === 'creator' ? '创作者' : t.crawler_type === 'creator_keyword' ? '作者×关键词' : '详情' }} {{ t.sort_type === 'general' ? '综合' : t.sort_type === 'popularity_descending' ? '热度' : '最新' }} {{ (t.date_start || '不限') + ' ~ ' + (t.date_end || '不限') }} 含评论 {{ t.status === 'running' ? '运行中' : t.status === 'completed' ? '已完成' : t.status === 'error' ? '任务失败' : '空闲' }}
失败原因:{{ t.error_reason }}
关键词: {{ t.keywords }}
每词爬取上限: {{ t.max_notes_per_keyword }} 条
穷尽翻页 · 上限 {{ t.exhaustive_max_pages === 0 ? '无' : (t.exhaustive_max_pages || 500) }} 页
日期内每词取 top {{ t.min_valid_notes_per_keyword }}
🔥 OR过滤: 赞≥{{ t.min_likes_count ?? 0 }} / 藏≥{{ t.min_collects_count ?? 0 }} / 评≥{{ t.min_comments_count ?? 0 }}
📊 最低互动(赞+藏+评): > {{ t.min_interaction_count }}
📊 复用 Base: {{ btTruncateToken(t.feishu_reuse_app_token) }} 📊 启动时新建 Base 📊 飞书:跟随全局复用设置
📊 飞书文件夹: {{ t.feishu_folder_token }}
📢 通知群: {{ t.notification_chat_id }}
上次运行: {{ t.last_run_at }}
{{ t.notes }}
飞书已写入 飞书写入中... 飞书写入失败 飞书未写入 飞书: 等待爬取完成
打开多维表格
任务日志 {{ taskLogView.task_id }} {{ taskLogView.status === 'running' ? '运行中' : taskLogView.status === 'completed' ? '已完成' : taskLogView.status === 'error' ? '任务失败' : taskLogView.status }}
失败原因:{{ taskLogView.error_reason }}
{{ log.timestamp }} {{ log.message }}
暂无日志
📊

飞书多维表格

爬取完成后自动写入飞书 Bitable

爬取完成后自动创建并写入多维表格

爬取完成后自动调用 Gemini 从视频中提取口播脚本,关闭后仅保存原始数据

仅对多作者/批量创作者任务生效:视频/图文仍追加写入「视频汇总」「图文汇总」;同时在同一 Base 下按配置新建周期分表(默认「视频_爬取{后缀}」「图文_爬取{后缀}」,后缀优先读「周期表后缀」,否则从「导出名称」解析 小红书爬取数据_YYYYMMDD_HHMMSS,再用日期范围或执行时间)。关键词搜索请用下方「关键词搜索复用」。

从飞书多维表格 URL 中获取,如 https://xxx.feishu.cn/base/HZebb1btnaiCHqs01F4cw3XXnAc,粗体部分即 App Token。留空则使用上次多作者任务自动记录的表格。

🔗

多作者/批量创作者任务写入完成后会更新此处;可直接打开链接或复制 App Token 用于多作者复用。

{{ config.feishu.last_bitable.url }}

App Token: {{ config.feishu.last_bitable.app_token }}

更新时间: {{ config.feishu.last_bitable.updated_at }}

仅对关键词搜索任务生效:每次写入同一张多维表格的「笔记数据」「评论数据」并追加,同时按爬取周期新建「笔记数据_开始_结束」等表。

留空则使用下方「上次关键词搜索创建的多维表格」中记录的表格。

🔗

关键词搜索任务写入完成后会更新此处;可直接打开链接或复制 App Token 用于搜索复用。

{{ config.feishu.last_search_bitable.url }}

App Token: {{ config.feishu.last_search_bitable.app_token }}

更新时间: {{ config.feishu.last_search_bitable.updated_at }}

增量数据只追加到视频汇总和图文汇总,不创建或更新各作者的独立分表

开启:每次爬取都把所有笔记追加为新行,同一笔记保留多条历史快照,可按「获取时间」字段筛选不同采集日期的数据。需配合上方「复用已有多维表格」才能跨次累积,否则每次新建表。关闭:同一笔记去重,只更新互动量。

在飞书管理后台「成员与部门」可查看 open_id(ou_ 开头)

User ID 示例:ac9fe8ag(成员与部门中可查)

默认将应用创建的多维表格所有者转给下方 open_id;关闭则明确不转移

转移后你可在「云文档」中看到该表格;同一账号的 User ID 可填在协作者中(如 ac9fe8ag)

🔔

群聊、Webhook 等可能随环境变化,在此修改

📋

粘贴参考多维表格 URL,拉取字段列表与当前配置对照,确保写入列名一致

{{ feishuRefFields.error }}

参考表格中的字段

{{ tb.name }}

{{ (tb.fields || []).map(f => f.field_name).join('、') || '(无)' }}

当前配置(关键词笔记表 search_note)

{{ currentSearchNoteFieldNames }}

🔗

刷新飞书视频汇总表中的临时下载链接(有效期约 24 小时)

URL 格式: https://xxx.feishu.cn/base/APP_TOKEN

{{ feishuRefresh.result.message }} ({{ feishuRefresh.result.elapsed_sec }}s)
🤖

使用 Gemini 从视频中提取完整口播脚本,结果写入飞书汇总表

修改提示词可以调整脚本提取的效果,如要求输出结构化分析、摘要等

提取范围
{{ scriptExtract.progress }}

{{ scriptExtract.result.message }}

总记录: {{ scriptExtract.result.total }} | 成功: {{ scriptExtract.result.processed }} | 失败: {{ scriptExtract.result.failed }} | 跳过: {{ scriptExtract.result.skipped }} | 耗时: {{ scriptExtract.result.elapsed_sec }}s

💾

断点续爬

中断后自动从上次位置继续

记录已爬取的内容,下次自动跳过

每爬取 N 条自动保存进度

自动重试上次失败的请求

适合 10 万+ 条数据

📋

运行日志 & 数据文件

查看爬取进度和导出文件

批量爬取日志 {{ batchLogs.length }}
{{ log.time }} {{ log.message }}

暂无日志

启动爬取后日志将在此显示

数据文件
{{ f.type === 'excel' ? '📗' : '📄' }}
{{ f.name }} {{ (f.size / 1024).toFixed(1) }} KB ({{ f.note_count }} 条)
{{ f.modified }}
暂无文件
{{ fileView.name }}
共 {{ fileView.data.total }} 条
加载中...
{{ fd }}
{{ row[fd] }}
{{ fileView.data.offset + 1 }}-{{ Math.min(fileView.data.offset + fileView.data.limit, fileView.data.total) }} / {{ fileView.data.total }}
{{ JSON.stringify(fileView.data.content, null, 2) }}
{{ fileView.data.content }}

已截断(仅显示前 10000 字符)

{{ fileView.error }}
{{ toast.type === 'success' ? '✓' : toast.type === 'error' ? '✗' : 'ℹ' }} {{ toast.message }}