注册

小红书也有skills啦!rednote-skills 开源项目深度解析

开源项目地址:github.com/MrMao007/re…


引言


在当今数字化时代,社交媒体平台如小红书已成为内容创作者和品牌推广的重要阵地。为了更高效地进行内容运营、数据分析和互动管理,我最近研究了一个名为 rednote-skills 的开源项目。这个项目提供了一套完整的工具集,能够实现对小红书平台的自动化交互,从搜索、内容提取到互动操作,功能十分全面。


本文将深入分析 rednote-skills 的架构设计、核心功能以及实现原理,希望能为对社交媒体自动化感兴趣的开发者提供参考。


项目概述


rednote-skills 是一个基于 Python 和 Playwright 的开源工具包,专门用于与小红书(xiaohongshu)平台进行自动化交互。它支持多种功能,包括:



  • 笔记搜索:根据关键词搜索小红书笔记
  • 内容提取:将指定笔记转换为结构化 Markdown 格式
  • 互动操作:点赞、收藏、评论、关注等
  • 内容发布:自动发布图文笔记

该项目最大的亮点是其作为 Claude Code 插件的能力,可以直接集成到 AI 开发环境中,让开发者通过自然语言指令来执行复杂的社交媒体操作。


技术架构分析


核心依赖


项目主要依赖于 Playwright 库,这是一个强大的浏览器自动化工具。通过模拟真实用户的浏览器行为,项目能够绕过小红书的一些反爬虫机制。


from playwright.sync_api import sync_playwright

Playwright 提供了同步和异步两种 API,项目采用了同步 API,使得代码逻辑更加清晰易懂。


认证机制


项目采用 Cookie-based 认证方式,将认证信息存储在 rednote_cookies.json 文件中:


try: 
context = browser.new_context(storage_state="rednote_cookies.json")
except FileNotFoundError:
return "❌ 未找到 cookies 文件,请先登录小红书并保存 cookies"

这种设计既保证了会话的持久性,又提供了手动登录的灵活性。validate_cookies.pymanual_login.py 脚本分别负责验证登录状态和处理手动登录流程。


浏览器管理


每个脚本都遵循相同的模式:启动浏览器 -> 加载上下文 -> 执行操作 -> 关闭资源:


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 实现了关键词搜索功能:


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 是项目中最复杂也是最有价值的功能之一。它不仅提取文本内容,还获取图片、视频、互动数据等:


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. 互动操作实现


项目中的互动功能(点赞、收藏、评论、关注)实现思路相似,都是通过定位特定元素并触发点击事件:


# 点赞操作
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 实现了笔记发布的完整流程,这是整个项目最复杂的部分:


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()

发布功能需要处理多步骤导航、文件上传、表单填写等多个复杂操作。


设计模式与最佳实践


统一的错误处理


每个脚本都实现了统一的错误处理逻辑,检查登录状态并返回相应的错误信息:


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 辅助开发的开发者来说,这个项目是一个很好的学习案例。它展示了如何将复杂的网页交互封装成简单易用的命令行工具,值得我们深入研究和借鉴。


作者:MrMao007
来源:juejin.cn/post/7605421123186229275

0 个评论

要回复文章请先登录注册