用影刀小红书低粉爆款关键词笔记采集

260 阅读7分钟

小红书低粉爆款关键词笔记采集

一.详细教程

1.多维表初始化

**作用:**存储采集的笔记,可以看作是一个数据库,放数据的空间。

1.去飞书开放平台(open.feishu.cn/app?lang=zh…),新建一个应用。

2.进入应用右侧的权限管理,开通多维表格云文档两个的全部权限。

img

imgimg

3.创建版本并发布应用。

4.在凭证与基础信息获取 AppIdAppSecret

img

5.新建一个多维表(sxuwebtech.feishu.cn/base)。

6.给多维表添加应用。

img

7.获取多维表格ID

例如在sxuwebtech.feishu.cn/base/Mm4rbG…Mm4rbGcJAarsVgsZcRJcAVtUnHb是多维表格ID

img

就这样我们得到了AppIdAppSecret以及多维表格ID

AppId

AppSecret

多维表格ID

2.设置自定义对话框

具体设置如下:

img

3.建立多维表连接

找到建立多维表格链接指令。

img

使用列出记录(视图)获取多维表内容。

img

使用json数据提取提取具体的列的内容。

img

可以通过打印日志查看是否成功了解。

4.打开关键词网站

通过分析:www.xiaohongshu.com/search_resu…RPA这个关键词就可以使其变为目标关键词的网站,即目标网站为:https://www.xiaohongshu.com/search_result?keyword={自定义中关键词的}&type=51

img

5.按照筛选排序

新建一个全局变量排序方式,并且为其赋值初始化时的排序方式,在后续会需要。

img

img

使鼠标停在筛选的按钮上才会出现选项。

img

捕获筛选条件,并且在文本匹配中使用全局变量

img

6.循环获取笔记网站

使用循环获取列表(Web)获取每个笔记,然后点击循环的笔记,使用获取网页信息,获取每个笔记的链接+关闭当前笔记,就使用获取到了每个笔记的网站。

img

判断获取的笔记是否在多维表中,如果包含,则打印日志,关闭笔记,进行下一次循环,如果不存在,则进行操作。

img

7.采集笔记信息

笔记标题

imgimg

笔记正文

imgimg

笔记点赞数+收藏数+评论数

img

注意:如果数量实际为0,那么捕获的是文字——"点赞","收藏","评论",将其赋值为0。

img

笔记类型

获取笔记是图片还是视频可以通过笔记左侧展示的格式来判断,使用 if网页包含指令 可以做到这个功能,初始化为视频类型,如果包含图文的则为图文类型,否则为视频类型。

img

笔记封面图

通过获取笔记封面,分析源码可知,通过src可以获取到封面链接。

img

img

笔记发布时间

使用魔法指令对日期进行提取与处理,我的提示词如下:

对捕获的信息进行日期提取,以及转换,依据当前时间转换
在编辑于 昨天 15:17 上海 提取 昨天 15:17
在编辑于 5天前 浙江 提取 5天前
可以处理多种日期提取

转换规律:
如提取日期:昨天 11:02,当前时间为2025-9-11,那么输出2025-9-10
如提取日期:前天 11:02,当前时间为2025-9-11,那么输出2025-9-09
如提取日期:07-31,那么输出07-31
如提取日期:5小时前,3分钟前等,根据当前时间,判断对于的输出日期

img

img

也可以选择使用python代码来处理

# 使用此指令前,请确保安装必要的Python库,例如使用以下命令安装:
# pip install python-dateutil

import re
from datetime import datetime, timedelta

# 移除不必要的导入和print重定义,保持代码简洁和xbot-command规范
# 
# try:
#     from xbot.app.logging import trace as print
# except:
#     

from typing import *
try:
    from xbot.app.logging import trace as print
except:
    from xbot import print

def extract_and_convert_date(text_with_date: str) -> str:
    """
    title: 提取并转换日期信息
    description: 从文本 % text_with_date % 中提取日期信息,并根据当前时间进行转换。支持“昨天”、“前天”、“X天前”、“X小时前”、“X分钟前”、“MM-DD”以及“YYYY-MM-DD”等多种格式。
    inputs:
        - text_with_date (str): 包含日期信息的文本,eg: "在编辑于 昨天 15:17 上海", "在编辑于 5天前 浙江", "07-31", "5小时前", "2024-07-22"
    outputs:
        - converted_date (str): 转换后的日期字符串,格式为“YYYY-MM-DD”或“MM-DD”,eg: "2025-09-10", "2024-07-31", "2024-07-22"
    """

    now = datetime.now()

    def _convert_relative_time_ago(match) -> str:
        """
        处理相对时间(X天前、X小时前、X分钟前)
        此函数期望接收一个re.Match对象,并根据捕获组计算日期。
        """
        if 'days_ago' in match.groupdict():
            days = int(match.group('days_ago'))
            return (now - timedelta(days=days)).strftime("%Y-%m-%d")
        elif 'hours_ago' in match.groupdict():
            hours = int(match.group('hours_ago'))
            return (now - timedelta(hours=hours)).strftime("%Y-%m-%d")
        elif 'minutes_ago' in match.groupdict():
            minutes = int(match.group('minutes_ago'))
            return (now - timedelta(minutes=minutes)).strftime("%Y-%m-%d")
        return ""

    # 尝试匹配各种日期模式,优先级从高到低
    patterns = [
        # 1. YYYY-MM-DD 完整日期格式 (最高优先级)
        (re.compile(r'(\d{4}-\d{1,2}-\d{1,2})'), lambda m: m.group(1)),
        # 2. 昨天 HH:MM 或 昨天 - 直接在lambda中处理
        (re.compile(r'(?:昨天)(?: (?:\d{1,2}:\d{2}))?'), lambda m: (now - timedelta(days=1)).strftime("%Y-%m-%d")),
        # 3. 前天 HH:MM 或 前天 - 直接在lambda中处理
        (re.compile(r'(?:前天)(?: (?:\d{1,2}:\d{2}))?'), lambda m: (now - timedelta(days=2)).strftime("%Y-%m-%d")),
        # 4. X天前 - 使用命名捕获组并传递给辅助函数
        (re.compile(r'(?P<days_ago>\d+)\s*天前'), lambda m: _convert_relative_time_ago(m)),
        # 5. X小时前 - 使用命名捕获组并传递给辅助函数
        (re.compile(r'(?P<hours_ago>\d+)\s*小时前'), lambda m: _convert_relative_time_ago(m)),
        # 6. X分钟前 - 使用命名捕获组并传递给辅助函数
        (re.compile(r'(?P<minutes_ago>\d+)\s*分钟前'), lambda m: _convert_relative_time_ago(m)),
        # 7. MM-DD - 转换为 YYYY-MM-DD 格式 (最低优先级,在完整日期之后)
        (re.compile(r'(\d{1,2}-\d{1,2})'), lambda m: f"{now.year}-{m.group(1)}")
    ]

    for pattern, converter in patterns:
        match = pattern.search(text_with_date)
        if match:
            return converter(match)

    raise ValueError(f"未能在文本中找到可识别的日期信息: {text_with_date}")

8.采集作者信息

要对作者信息采集,需要先把鼠标悬浮在作者的头像或者名字上。

imgimg

作者名称

imgimg

作者主页链接

img

获取网页链接地址,通过分析可知,获取的为相对链接,使用需要在变量前面加入https://www.xiaohongshu.com

imgimg

作者头像链接

同样获取属性src。

img

作者简介

imgimg

作者关注数

imgimg

作者粉丝数

imgimg

作者获赞与收藏数

imgimg

9.循环采集

使用无限循环采集笔记直到采集到我们要的数量。

img

在循环的外围设置已采集笔记数量,在每次循环相似元素的最后,进行整数加1,并且判断是否达到采集的数量要求,如果达到则退出循环,在无限循环里同理设置判断是否达到采集的数量要求,如果没,则滚动网页,继续采集。

img

imgimg

10.同步飞书多维表

到目前已收集:笔记链接,标题,正文,点赞数,评论数,收藏数,笔记类型,笔记封面图,发布时间,作者名称,作者主页链接,作者头像链接,作者简介,作者关注数,作者粉丝数,作者获赞与收藏数,关键词

在数量+1前,新建一个字典。

img

为每个增加键值对。

imgimg

img

最后对我们的指定表添加记录。

img

img

11.测试

经过运行可以发现笔记标题作者简介,以及笔记正文等,可以为空,即捕获不到,所以在高级设置把他们等待时间设置为3s以及报错是执行的操作为:忽略异常,继续程序

img

img

二.完整源码

img