开源项目地址:github.com/MrMao007/re...
引言
在当今数字化时代,社交媒体平台如小红书已成为内容创作者和品牌推广的重要阵地。为了更高效地进行内容运营、数据分析和互动管理,我最近研究了一个名为 rednote-skills 的开源项目。这个项目提供了一套完整的工具集,能够实现对小红书平台的自动化交互,从搜索、内容提取到互动操作,功能十分全面。
本文将深入分析 rednote-skills 的架构设计、核心功能以及实现原理,希望能为对社交媒体自动化感兴趣的开发者提供参考。
项目概述
rednote-skills 是一个基于 Python 和 Playwright 的开源工具包,专门用于与小红书(xiaohongshu)平台进行自动化交互。它支持多种功能,包括:
- 笔记搜索:根据关键词搜索小红书笔记
- 内容提取:将指定笔记转换为结构化 Markdown 格式
- 互动操作:点赞、收藏、评论、关注等
- 内容发布:自动发布图文笔记
该项目最大的亮点是其作为 Claude Code 插件的能力,可以直接集成到 AI 开发环境中,让开发者通过自然语言指令来执行复杂的社交媒体操作。
技术架构分析
核心依赖
项目主要依赖于 Playwright 库,这是一个强大的浏览器自动化工具。通过模拟真实用户的浏览器行为,项目能够绕过小红书的一些反爬虫机制。
python
from playwright.sync_api import sync_playwright
Playwright 提供了同步和异步两种 API,项目采用了同步 API,使得代码逻辑更加清晰易懂。
认证机制
项目采用 Cookie-based 认证方式,将认证信息存储在 rednote_cookies.json 文件中:
python
try:
context = browser.new_context(storage_state="rednote_cookies.json")
except FileNotFoundError:
return "❌ 未找到 cookies 文件,请先登录小红书并保存 cookies"
这种设计既保证了会话的持久性,又提供了手动登录的灵活性。validate_cookies.py 和 manual_login.py 脚本分别负责验证登录状态和处理手动登录流程。
浏览器管理
每个脚本都遵循相同的模式:启动浏览器 -> 加载上下文 -> 执行操作 -> 关闭资源:
python
with sync_playwright() as playwright:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(storage_state="rednote_cookies.json")
page = context.new_page()
# ... 执行具体操作 ...
context.close()
browser.close()
核心功能详解
1. 笔记搜索功能
search_note_by_key_word.py 实现了关键词搜索功能:
python
def search(key_word: str, top_n: int) -> list[str]:
with sync_playwright() as playwright:
browser =playwright.chromium.launch(headless=True)
# ... 验证登录 ...
page.goto("https://www.xiaohongshu.com/search_result?keyword=" + key_word)
page.wait_for_timeout(3000)
prefix = 'https://www.xiaohongshu.com'
links = page.query_selector_all('a.cover.mask.ld')
# 获取所有 href 属性
hrefs = []
for link in links:
href = link.get_attribute('href')
if href:
href = prefix + href
hrefs.append(href)
if len(hrefs) >= top_n:
break
return hrefs
这个函数通过选择器 'a.cover.mask.ld' 来定位搜索结果中的笔记链接,并限制返回数量以提高效率。
2. 内容提取功能
dump_note.py 是项目中最复杂也是最有价值的功能之一。它不仅提取文本内容,还获取图片、视频、互动数据等:
python
note_data = page.evaluate("""
() => {
const noteDetailMap = window.__INITIAL_STATE__?.note?.noteDetailMap;
if (noteDetailMap) {
const firstKey = Object.keys(noteDetailMap)[0];
return JSON.stringify(noteDetailMap[firstKey]?.note);
}
return null;
}
""")
通过直接访问页面的 window.__INITIAL_STATE__ 变量,脚本能够获取到完整的笔记 JSON 数据,避免了复杂的 DOM 解析。
3. 互动操作实现
项目中的互动功能(点赞、收藏、评论、关注)实现思路相似,都是通过定位特定元素并触发点击事件:
python
# 点赞操作
page.locator(".left > .like-wrapper > .like-lottie").click()
# 收藏操作
page.locator(".reds-icon.collect-icon").click()
# 评论操作
page.locator(".chat-wrapper > .reds-icon").click()
page.locator("#content-textarea").fill(comment_text)
page.get_by_role("button", name="发送").click()
这些选择器是通过实际测试确定的,反映了小红书当前的 DOM 结构。
4. 内容发布功能
publish_note.py 实现了笔记发布的完整流程,这是整个项目最复杂的部分:
python
def publish_text(image_urls: List[str], title: str, content: str, tags: List[str]) -> str:
# ... 初始化浏览器和验证登录 ...
page.get_by_role("button", name="创作中心").hover()
with page.expect_popup() as page1_info:
page.get_by_role("link", name="创作服务").click()
page1 = page1_info.value
page1.get_by_text("发布图文笔记").click()
# 处理文件上传
page1.on("filechooser", lambda file_chooser: file_chooser.set_files(rednoteArticle.image_urls))
# 填写表单内容
page1.get_by_role("textbox", name="填写标题会有更多赞哦").fill(rednoteArticle.title)
final_content = rednoteArticle.content + "\n\n" + "\n".join([f"#{tag}" for tag in rednoteArticle.tags])
page1.get_by_role("paragraph").filter(has_text=re.compile(r"^$")).fill(final_content)
# 最终发布
page1.get_by_role("button", name="发布").click()
发布功能需要处理多步骤导航、文件上传、表单填写等多个复杂操作。
设计模式与最佳实践
统一的错误处理
每个脚本都实现了统一的错误处理逻辑,检查登录状态并返回相应的错误信息:
python
login_button = page.locator("form").get_by_role("button", name="登录")
if(login_button.is_visible()):
return "❌ 未登录小红书,请先登录"
模块化设计
项目将不同功能分解为独立的 Python 脚本,每个脚本都可以独立运行,同时也便于集成到更大的系统中。
命令行接口
所有脚本都提供了清晰的命令行接口,使用 argparse 进行参数解析,方便在各种环境下调用。
使用场景与价值
1. 内容运营自动化
对于内容运营人员来说,这个工具可以显著提升工作效率:
- 自动搜索相关话题的内容
- 批量收集竞品账号的数据
- 自动发布内容减少重复劳动
2. 数据分析与研究
研究人员可以利用这个工具收集小红书上的公开数据,用于:
- 社交媒体趋势分析
- 用户行为研究
- 文本情感分析
3. AI 辅助创作
结合 Claude Code 等 AI 平台,开发者可以通过自然语言指令控制小红书操作,实现智能化的内容管理和互动。
注意事项与建议
合规性考虑
在使用这类工具时,必须严格遵守小红书的使用条款和服务协议,避免:
- 频繁操作导致账号受限
- 发布违规内容
- 侵犯他人隐私权
性能优化
由于依赖浏览器自动化,项目在性能方面有一些局限性:
- 操作速度相对较慢
- 占用较多系统资源
- 可能受网络状况影响
维护成本
小红书平台界面可能会更新,这要求定期维护选择器和操作流程,确保工具持续可用。
总结
rednote-skills 是一个功能强大且设计良好的小红书自动化工具集。它通过 Playwright 实现了对小红书平台的全面自动化操作,为内容运营、数据分析等场景提供了便利。
项目的架构设计合理,模块化程度高,易于扩展和维护。虽然存在一些性能和合规性方面的考虑,但其价值仍然不容忽视。
对于希望深入了解浏览器自动化、社交媒体 API 模拟或 AI 辅助开发的开发者来说,这个项目是一个很好的学习案例。它展示了如何将复杂的网页交互封装成简单易用的命令行工具,值得我们深入研究和借鉴。