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

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

相关推荐
mCell6 小时前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
deephub6 小时前
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
人工智能·microsoft·langchain·大语言模型·agent·强化学习
冬奇Lab7 小时前
一天一个开源项目(第20篇):NanoBot - 轻量级AI Agent框架,极简高效的智能体构建工具
人工智能·开源·agent
阿里云云原生11 小时前
函数计算 AgentRun 重磅上线知识库功能,赋能智能体更“懂”你
agent
hbstream12 小时前
国内四大AI编程IDE对比(二):从零构建桌面应用实测
agent
Believeinbetter13 小时前
langchain 1.0实现AI Agent 接入MCP实战
langchain·agent
量子位14 小时前
华为升级行业Agent算法架构!MindScale自己写prompt和工作流,KV Cache减少5.7倍token
aigc·agent·ai编程
量子位14 小时前
大模型桌游试玩员来了:用五大画像模拟「千人千面」,评分精准度超越GPT-5.1
agent·ai编程
星浩AI19 小时前
手把手教你安装 OpenClaw 并接入飞书,让本地 AI 在飞书里听你指挥
后端·机器人·agent