小红书帖子创作与发布技能
概述
快速创作并发布小红书帖子,包括标题、正文、标签、配图,自动上传到小红书平台。
核心特点(v5.3):
- 🚀 极简流程:搜索 → 生成内容 → 获取配图 → 验证图片 → 自动上传
- 🖼️ 智能配图:从网络下载公开图片或 AI 生成
- ✅ 图片验证:自动检测无效图片并删除,确保5-6张有效图片
- 📁 精简输出:只生成 preview.html、config.json、images/
- 🤖 自动上传:直接触发,减少手动确认
- 🔐 登录检测:智能检测登录状态,20秒等待提示
- 🐍 零依赖:Python 原生能力为主
前置检查(第一步,自动执行)
检查 Python
python3 --version # 要求 3.7+
全局检测并安装 Playwright
重要: 只在未安装时才安装,避免重复安装
# 检查 playwright 是否已安装(全局检测)
if python3 -c "import playwright" 2>/dev/null; then
echo "✅ Playwright 已安装,跳过安装"
else
echo "📦 正在安装 Playwright 到用户全局环境..."
# 安装到用户全局环境
pip3 install --user playwright
# 安装 Chromium 浏览器
python3 -m playwright install chromium
echo "✅ Playwright 安装完成"
fi
检测逻辑:
- 先检查系统是否已安装 playwright 模块
- 如果已安装,跳过安装步骤
- 如果未安装,安装到用户全局环境(
--user)
- 只需安装一次,后续使用无需重复安装
输出:✅ 环境检查完成
工作流程
步骤1:深度搜索话题
使用 WebSearch 工具搜索 2-3 个相关关键词,获取最新数据和案例。
步骤2:生成帖子内容
- 标题:不超过20个字符(含emoji),包含钩子词,简洁有力
- 正文:300-500字,开头钩子 → 核心内容 → 总结互动
- 标签:5个(精选核心标签,不要超过5个)
步骤3:获取配图(5-6张)
优先级:
- 从网络下载公开图片(Unsplash/Pexels/Pixabay)
- AI 生成补充(可选,如果模型无法生成则跳过)
要求:
- 数量:5-6张(1封面 + 4-5内容图)
- 命名:cover.png, image_1.png, image_2.png, image_3.png, image_4.png...
- 格式:PNG/JPG
🎯 精准配图关键词生成策略(重要!)
核心原则: 搜索关键词必须高度具体化,避免泛化词汇
关键词生成规则:
主体词必须具体化: 不用泛化词,用具体实体名
- ❌ 错误: "游戏" "game" "gaming"
- ✅ 正确: "Minecraft" "我的世界方块" "Minecraft Steve"
场景/画面词优先: 描述具体画面内容
- ❌ 错误: "美食" "food"
- ✅ 正确: "拉面特写" "ramen noodles closeup"
英文关键词为主: 图库用英文搜索效果更好
- 将中文主题翻译成对应的英文专有名词
- 游戏:用游戏官方英文名
- 品牌:用品牌英文名
不同主题的关键词构建:
| 主题类型 |
泛化词(❌避免) |
精准词(✅使用) |
| 游戏《我的世界》 |
game, gaming, 游戏 |
Minecraft, Minecraft blocks, Minecraft world, pixel art cube |
| 游戏《原神》 |
game, RPG |
Genshin Impact, Genshin character, anime game |
| 游戏《王者荣耀》 |
MOBA, 手游 |
Honor of Kings, MOBA hero |
| 美食-火锅 |
food, 美食 |
hotpot, Chinese hotpot, spicy pot |
| 旅行-日本 |
travel, 旅行 |
Tokyo tower, Japan temple, cherry blossom |
| 科技-AI |
technology |
AI robot, artificial intelligence, neural network |
| 穿搭-韩系 |
fashion, 穿搭 |
Korean outfit, OOTD, minimalist style |
配图搜索执行步骤:
- 分析帖子主题,提取核心实体(游戏名/品牌名/地点名等)
- 将核心实体转换为英文专有名词
- 组合搜索词:
[英文专有名词] + [画面描述词]
- 每张图使用不同角度的关键词组合
示例 - 主题"我的世界游戏":
封面图: "Minecraft world landscape" 或 "Minecraft building"
图1: "Minecraft blocks closeup"
图2: "Minecraft Steve character"
图3: "Minecraft castle build"
图4: "Minecraft pixel art"
图5: "Minecraft survival gameplay"
示例 - 主题"火锅推荐":
封面图: "Chinese hotpot restaurant"
图1: "hotpot ingredients fresh"
图2: "spicy hotpot soup"
图3: "hotpot meat slices"
图4: "hotpot dipping sauce"
mkdir -p ./redbook-article/[主题]-[日期]/images/
# 使用精准关键词下载图片到 images 目录
步骤3.5:验证图片有效性(重要!)
下载完成后必须验证每张图片,删除无效图片并补充下载,确保最终有5-6张有效图片。
import os
import struct
def is_valid_image(file_path):
"""验证图片文件是否有效"""
if not os.path.exists(file_path):
return False
# 检查文件大小(至少1KB)
if os.path.getsize(file_path) < 1024:
return False
try:
with open(file_path, 'rb') as f:
header = f.read(32)
# PNG: 89 50 4E 47 0D 0A 1A 0A
if header[:8] == b'\x89PNG\r\n\x1a\n':
return True
# JPEG: FF D8 FF
if header[:3] == b'\xff\xd8\xff':
return True
# GIF: GIF87a 或 GIF89a
if header[:6] in (b'GIF87a', b'GIF89a'):
return True
# WebP: RIFF....WEBP
if header[:4] == b'RIFF' and header[8:12] == b'WEBP':
return True
except Exception:
return False
return False
def validate_and_clean_images(images_dir):
"""验证并清理无效图片,返回有效图片列表"""
valid_images = []
invalid_images = []
for filename in sorted(os.listdir(images_dir)):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.webp')):
file_path = os.path.join(images_dir, filename)
if is_valid_image(file_path):
valid_images.append(filename)
print(f"✅ {filename} - 有效")
else:
invalid_images.append(filename)
print(f"❌ {filename} - 无效,已删除")
os.remove(file_path)
return valid_images, invalid_images
# 使用示例
images_dir = '/path/to/images'
valid, invalid = validate_and_clean_images(images_dir)
print(f"\n有效图片: {len(valid)} 张")
print(f"已删除无效图片: {len(invalid)} 张")
# 如果有效图片不足5张,需要补充下载
if len(valid) < 5:
print(f"⚠️ 图片不足,需要补充 {5 - len(valid)} 张")
验证流程:
- 下载所有图片后,运行验证脚本
- 删除无效图片(文件头不正确或大小过小)
- 统计有效图片数量
- 如果有效图片少于5张,必须补充下载新图片
- 重复验证直到有5-6张有效图片
步骤4:生成本地文件
目录结构:
redbook-article/
└── [主题]-[日期]/
├── preview.html
├── config.json
└── images/
├── cover.png
├── image_1.png
├── image_2.png
├── image_3.png
└── image_4.png
生成 config.json(重要:使用 json.dump 自动转义):
import json
config = {
"title": title,
"content": content, # json.dump 会自动处理转义
"tags": tags,
"cover": "images/cover.png",
"images": ["images/image_1.png", "images/image_2.png", "images/image_3.png", "images/image_4.png"]
}
with open('config.json', 'w', encoding='utf-8') as f:
json.dump(config, f, ensure_ascii=False, indent=2)
生成 preview.html(使用 Newsprint 风格模板):
- 读取模板:
/Users/a58/.claude/skills/redbook-creator-publish/assets/preview-template.html
- 替换变量:
{{TITLE}} → 标题
{{CONTENT}} → 正文
{{DATE}} → 日期
{{TAGS}} → 标签HTML(每个标签包裹在 <span class="tag"> 中)
- 添加封面图和配图的
<img> 标签
- 保存为
preview.html
步骤5:自动上传到小红书
重要:必须触发自动上传,即使前面有错误也要尝试。
python3 /Users/a58/.claude/skills/redbook-creator-publish/scripts/auto_upload_playwright.py \
--config ./redbook-article/[主题]-[日期]/config.json
流程(v5.1 优化):
- 打开小红书创作者平台
- 智能登录检测:
- 自动检测上传控件DOM是否存在
- 如未登录,提示用户在 20 秒内登录
- 每秒检测一次,登录成功后自动继续
- 20 秒后仍未检测到控件,退出并提示手动上传
- 上传图片(cover.png 第一张)
- 填写标题
- 填写正文
- 逐个输入标签(间隔1秒+回车)
- 点击发布
- 浏览器保持打开(不自动关闭)
注意事项
内容创作
- 标题:不超过20个字符(含emoji)
- 正文字数:300-500字
- 配图数量:5-6张(1封面+4-5副图)
- 标签:5个(不要超过5个)
- 图片来源:公开免费图库或 AI 生成
- 图片验证:下载后必须验证有效性,删除无效图片并补充
自动上传(v5.1)
- 必须触发上传脚本
- 首次使用:在20秒提示期内登录小红书账号
- 后续使用:自动保持登录,无需重复登录
- 标签间隔 1 秒并回车
- 浏览器不会自动关闭,可继续查看或编辑
- 如 20 秒内未登录,请手动上传或重新执行
技术配置
- Python 3.7+
- Playwright(只需安装一次,全局检测)
- config.json 中文符号需正确转义
手动上传备选方案
如果自动上传失败:
- 打开:https://creator.xiaohongshu.com/publish/publish
- 按顺序上传图片(cover.png 第一张)
- 从 preview.html 复制标题和正文
- 添加标签
- 点击发布
参考文档
- references/style-guide.md - 小红书内容风格规范
- scripts/auto_upload_playwright.py - Playwright 自动上传脚本
- assets/preview-template.html - Newsprint 风格预览模板
更新日志
v5.4 (2026-01-27)
- ✅ 新增精准配图关键词生成策略
- ✅ 添加不同主题的关键词构建规则表
- ✅ 强调使用英文专有名词搜索
- ✅ 提供游戏/美食/旅行等主题的搜索关键词示例
- ✅ 更新style-guide.md增加主题精准匹配原则
v5.3 (2026-01-27)
- ✅ 新增图片有效性验证(检测文件头和大小)
- ✅ 自动删除无效图片并提示补充下载
- ✅ 配图数量调整为5-6张(1封面+4-5副图)
- ✅ 添加 allowedCommands 配置,减少手动确认提示
v5.2 (2026-01-27)
- ✅ 标题限制改为20个字符(含emoji)
- ✅ 标签数量从8-10个改为5个
- ✅ 配置自动批准权限,减少确认提示
v5.1 (2026-01-27)
- ✅ 新增智能登录检测(检测上传控件DOM)
- ✅ 20秒登录等待提示,每秒检测
- ✅ 浏览器不自动关闭,保持打开状态
- ✅ Playwright 全局安装检测,避免重复安装
v5.0 (2026-01-27)
版本:v5.4(精准配图版)
更新日期:2026-01-27
1---2name: redbook-creator-publish3description: 小红书帖子创作与发布技能。用于:(1) 生成小红书风格的帖子内容(标题+正文+标签)(2) 获取/生成帖子配图 (3) 自动上传到小红书创作者平台。触发词:小红书创作、create redbook、小红书、红书、笔记创作、帖子创作4---56# 小红书帖子创作与发布技能78## 概述910快速创作并发布小红书帖子,包括标题、正文、标签、配图,自动上传到小红书平台。1112**核心特点(v5.3)**:13- 🚀 **极简流程**:搜索 → 生成内容 → 获取配图 → 验证图片 → 自动上传14- 🖼️ **智能配图**:从网络下载公开图片或 AI 生成15- ✅ **图片验证**:自动检测无效图片并删除,确保5-6张有效图片16- 📁 **精简输出**:只生成 preview.html、config.json、images/17- 🤖 **自动上传**:直接触发,减少手动确认18- 🔐 **登录检测**:智能检测登录状态,20秒等待提示19- 🐍 **零依赖**:Python 原生能力为主2021---2223## 前置检查(第一步,自动执行)2425### 检查 Python2627```bash28python3 --version # 要求 3.7+29```3031### 全局检测并安装 Playwright3233**重要**: 只在未安装时才安装,避免重复安装3435```bash36# 检查 playwright 是否已安装(全局检测)37if python3 -c "import playwright" 2>/dev/null; then38 echo "✅ Playwright 已安装,跳过安装"39else40 echo "📦 正在安装 Playwright 到用户全局环境..."41 # 安装到用户全局环境42 pip3 install --user playwright43 # 安装 Chromium 浏览器44 python3 -m playwright install chromium45 echo "✅ Playwright 安装完成"46fi47```4849**检测逻辑**:50- 先检查系统是否已安装 playwright 模块51- 如果已安装,跳过安装步骤52- 如果未安装,安装到用户全局环境(`--user`)53- 只需安装一次,后续使用无需重复安装5455输出:`✅ 环境检查完成`5657---5859## 工作流程6061### 步骤1:深度搜索话题6263使用 WebSearch 工具搜索 2-3 个相关关键词,获取最新数据和案例。6465### 步骤2:生成帖子内容6667- **标题**:不超过20个字符(含emoji),包含钩子词,简洁有力68- **正文**:300-500字,开头钩子 → 核心内容 → 总结互动69- **标签**:5个(精选核心标签,不要超过5个)7071### 步骤3:获取配图(5-6张)7273**优先级**:741. 从网络下载公开图片(Unsplash/Pexels/Pixabay)752. AI 生成补充(可选,如果模型无法生成则跳过)7677**要求**:78- 数量:**5-6张(1封面 + 4-5内容图)**79- 命名:cover.png, image_1.png, image_2.png, image_3.png, image_4.png...80- 格式:PNG/JPG8182#### 🎯 精准配图关键词生成策略(重要!)8384**核心原则**: 搜索关键词必须高度具体化,避免泛化词汇8586**关键词生成规则**:871. **主体词必须具体化**: 不用泛化词,用具体实体名88 - ❌ 错误: "游戏" "game" "gaming"89 - ✅ 正确: "Minecraft" "我的世界方块" "Minecraft Steve"90912. **场景/画面词优先**: 描述具体画面内容92 - ❌ 错误: "美食" "food"93 - ✅ 正确: "拉面特写" "ramen noodles closeup"94953. **英文关键词为主**: 图库用英文搜索效果更好96 - 将中文主题翻译成对应的英文专有名词97 - 游戏:用游戏官方英文名98 - 品牌:用品牌英文名99100**不同主题的关键词构建**:101102| 主题类型 | 泛化词(❌避免) | 精准词(✅使用) |103|---------|--------------|--------------|104| 游戏《我的世界》| game, gaming, 游戏 | Minecraft, Minecraft blocks, Minecraft world, pixel art cube |105| 游戏《原神》| game, RPG | Genshin Impact, Genshin character, anime game |106| 游戏《王者荣耀》| MOBA, 手游 | Honor of Kings, MOBA hero |107| 美食-火锅 | food, 美食 | hotpot, Chinese hotpot, spicy pot |108| 旅行-日本 | travel, 旅行 | Tokyo tower, Japan temple, cherry blossom |109| 科技-AI | technology | AI robot, artificial intelligence, neural network |110| 穿搭-韩系 | fashion, 穿搭 | Korean outfit, OOTD, minimalist style |111112**配图搜索执行步骤**:1131. 分析帖子主题,提取**核心实体**(游戏名/品牌名/地点名等)1142. 将核心实体转换为**英文专有名词**1153. 组合搜索词: `[英文专有名词] + [画面描述词]`1164. 每张图使用不同角度的关键词组合117118**示例 - 主题"我的世界游戏"**:119```120封面图: "Minecraft world landscape" 或 "Minecraft building"121图1: "Minecraft blocks closeup"122图2: "Minecraft Steve character"123图3: "Minecraft castle build"124图4: "Minecraft pixel art"125图5: "Minecraft survival gameplay"126```127128**示例 - 主题"火锅推荐"**:129```130封面图: "Chinese hotpot restaurant"131图1: "hotpot ingredients fresh"132图2: "spicy hotpot soup"133图3: "hotpot meat slices"134图4: "hotpot dipping sauce"135```136137```bash138mkdir -p ./redbook-article/[主题]-[日期]/images/139# 使用精准关键词下载图片到 images 目录140```141142### 步骤3.5:验证图片有效性(重要!)143144**下载完成后必须验证每张图片**,删除无效图片并补充下载,确保最终有5-6张有效图片。145146```python147import os148import struct149150def is_valid_image(file_path):151 """验证图片文件是否有效"""152 if not os.path.exists(file_path):153 return False154155 # 检查文件大小(至少1KB)156 if os.path.getsize(file_path) < 1024:157 return False158159 try:160 with open(file_path, 'rb') as f:161 header = f.read(32)162163 # PNG: 89 50 4E 47 0D 0A 1A 0A164 if header[:8] == b'\x89PNG\r\n\x1a\n':165 return True166167 # JPEG: FF D8 FF168 if header[:3] == b'\xff\xd8\xff':169 return True170171 # GIF: GIF87a 或 GIF89a172 if header[:6] in (b'GIF87a', b'GIF89a'):173 return True174175 # WebP: RIFF....WEBP176 if header[:4] == b'RIFF' and header[8:12] == b'WEBP':177 return True178179 except Exception:180 return False181182 return False183184def validate_and_clean_images(images_dir):185 """验证并清理无效图片,返回有效图片列表"""186 valid_images = []187 invalid_images = []188189 for filename in sorted(os.listdir(images_dir)):190 if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.webp')):191 file_path = os.path.join(images_dir, filename)192 if is_valid_image(file_path):193 valid_images.append(filename)194 print(f"✅ {filename} - 有效")195 else:196 invalid_images.append(filename)197 print(f"❌ {filename} - 无效,已删除")198 os.remove(file_path)199200 return valid_images, invalid_images201202# 使用示例203images_dir = '/path/to/images'204valid, invalid = validate_and_clean_images(images_dir)205print(f"\n有效图片: {len(valid)} 张")206print(f"已删除无效图片: {len(invalid)} 张")207208# 如果有效图片不足5张,需要补充下载209if len(valid) < 5:210 print(f"⚠️ 图片不足,需要补充 {5 - len(valid)} 张")211```212213**验证流程**:2141. 下载所有图片后,运行验证脚本2152. 删除无效图片(文件头不正确或大小过小)2163. 统计有效图片数量2174. **如果有效图片少于5张,必须补充下载新图片**2185. 重复验证直到有5-6张有效图片219220### 步骤4:生成本地文件221222**目录结构**:223```224redbook-article/225└── [主题]-[日期]/226 ├── preview.html227 ├── config.json228 └── images/229 ├── cover.png230 ├── image_1.png231 ├── image_2.png232 ├── image_3.png233 └── image_4.png234```235236**生成 config.json**(重要:使用 json.dump 自动转义):237```python238import json239240config = {241 "title": title,242 "content": content, # json.dump 会自动处理转义243 "tags": tags,244 "cover": "images/cover.png",245 "images": ["images/image_1.png", "images/image_2.png", "images/image_3.png", "images/image_4.png"]246}247248with open('config.json', 'w', encoding='utf-8') as f:249 json.dump(config, f, ensure_ascii=False, indent=2)250```251252**生成 preview.html**(使用 Newsprint 风格模板):2531. 读取模板:`/Users/a58/.claude/skills/redbook-creator-publish/assets/preview-template.html`2542. 替换变量:255 - `{{TITLE}}` → 标题256 - `{{CONTENT}}` → 正文257 - `{{DATE}}` → 日期258 - `{{TAGS}}` → 标签HTML(每个标签包裹在 `<span class="tag">` 中)2593. 添加封面图和配图的 `<img>` 标签2604. 保存为 `preview.html`261262### 步骤5:自动上传到小红书263264**重要**:必须触发自动上传,即使前面有错误也要尝试。265266```bash267python3 /Users/a58/.claude/skills/redbook-creator-publish/scripts/auto_upload_playwright.py \268 --config ./redbook-article/[主题]-[日期]/config.json269```270271**流程(v5.1 优化)**:2721. 打开小红书创作者平台2732. **智能登录检测**:274 - 自动检测上传控件DOM是否存在275 - 如未登录,提示用户在 20 秒内登录276 - 每秒检测一次,登录成功后自动继续277 - 20 秒后仍未检测到控件,退出并提示手动上传2783. 上传图片(cover.png 第一张)2794. 填写标题2805. 填写正文2816. 逐个输入标签(间隔1秒+回车)2827. 点击发布2838. **浏览器保持打开**(不自动关闭)284285---286287## 注意事项288289### 内容创作290- **标题**:不超过20个字符(含emoji)291- 正文字数:300-500字292- **配图数量:5-6张(1封面+4-5副图)**293- **标签**:5个(不要超过5个)294- 图片来源:公开免费图库或 AI 生成295- **图片验证**:下载后必须验证有效性,删除无效图片并补充296297### 自动上传(v5.1)298- 必须触发上传脚本299- **首次使用**:在20秒提示期内登录小红书账号300- **后续使用**:自动保持登录,无需重复登录301- 标签间隔 1 秒并回车302- **浏览器不会自动关闭**,可继续查看或编辑303- 如 20 秒内未登录,请手动上传或重新执行304305### 技术配置306- Python 3.7+307- Playwright(**只需安装一次**,全局检测)308- config.json 中文符号需正确转义309310---311312## 手动上传备选方案313314如果自动上传失败:3153161. 打开:https://creator.xiaohongshu.com/publish/publish3172. 按顺序上传图片(cover.png 第一张)3183. 从 preview.html 复制标题和正文3194. 添加标签3205. 点击发布321322---323324## 参考文档325326- [references/style-guide.md](references/style-guide.md) - 小红书内容风格规范327- [scripts/auto_upload_playwright.py](scripts/auto_upload_playwright.py) - Playwright 自动上传脚本328- [assets/preview-template.html](assets/preview-template.html) - Newsprint 风格预览模板329330---331332## 更新日志333334### v5.4 (2026-01-27)335- ✅ 新增精准配图关键词生成策略336- ✅ 添加不同主题的关键词构建规则表337- ✅ 强调使用英文专有名词搜索338- ✅ 提供游戏/美食/旅行等主题的搜索关键词示例339- ✅ 更新style-guide.md增加主题精准匹配原则340341### v5.3 (2026-01-27)342- ✅ 新增图片有效性验证(检测文件头和大小)343- ✅ 自动删除无效图片并提示补充下载344- ✅ 配图数量调整为5-6张(1封面+4-5副图)345- ✅ 添加 allowedCommands 配置,减少手动确认提示346347### v5.2 (2026-01-27)348- ✅ 标题限制改为20个字符(含emoji)349- ✅ 标签数量从8-10个改为5个350- ✅ 配置自动批准权限,减少确认提示351352### v5.1 (2026-01-27)353- ✅ 新增智能登录检测(检测上传控件DOM)354- ✅ 20秒登录等待提示,每秒检测355- ✅ 浏览器不自动关闭,保持打开状态356- ✅ Playwright 全局安装检测,避免重复安装357358### v5.0 (2026-01-27)359- 极简版发布360361---362363**版本**:v5.4(精准配图版)364**更新日期**:2026-01-27