前言

上一篇文章,《办公自动化 Automa:小红书笔记数据,导出 Excel 报表分析》,介绍了使用 Automa ,把小红书后台笔记数据,下载为 Excel 分析。工具经过使用,获得了不错的反馈。特别是单篇笔记 10万+展现量的数据,在 JavaScript 块,数据提取做了适配。

有几个常见问题,后台经常被问到,列在这里:

问:Automa 是跨平台的吗?
答:是的。支持 Widnows、Linux、macOS。

问:Automa 支持哪些浏览器?
答:主流浏览器,Chrome 谷歌浏览器,Firefox 火狐浏览器,微软 Edge 浏览器,以及绝大多数基于 Chromium 的浏览器,如360极速浏览器,Yandex 等。

问:Automa 是 RPA 吗?
答:Automa 是浏览器插件,通过拖拽处理工作流,低代码、无代码,实现自动化。只能在浏览器用,算是 RPA 的浏览器版吧。

本文继续 Automa 课程,带大家一步步实现,获取小红书热门笔记的评论,下载到 Excel 。

准备工作

评论数据,从小红书网页端获取。网页地址:

https://www.xiaohongshu.com/explore

打开这个网页,是根据分类,推荐的热门笔记。

F12 打开控制台,通过 Elements 元素,查看笔记的数据格式。

随便找一篇,点赞量高的,评论量应该会多。

向下滚动,查看评论区内容。

展开页面元素。

根据类名定位元素,还是比较固定的。但提取这些数据,整理为结构,比较麻烦。如果有接口数据使用,就能节省不少时间。

在控制台 – 网络,筛选项中,仅选择 “Fetch/XHR”。在向下滚动评论时,看到如下的 GET 请求:

https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id=xxxxx&cursor=&top_comment_id=&image_formats=jpg,webp,avif

上面的链接 QueryString 参数,注掉了note_id数据,仅用作展示。

最主要的响应,是一个 JSON 结构。其中 data 字段,是一个 Object 对象。comments 是一个数组结构。

为了演示方面,我把数据做了精简,仅给出一个元素的完整结构。

{
    "code"0,
    "success"true,
    "msg""成功",
    "data": {
        "cursor""65b86d110000000008009cc9",
        "has_more"true,
        "time"1706621250437,
        "user_id""602dc658000000000100584e",
        "comments": [
            {
                "content""要是我和他交往不久他家里人去世,我就会觉得八字不合[失望R]",
                "user_info": {
                    "user_id""54e7d8fa4fac6301aa2d708c",
                    "nickname""TY Fan",
                    "image""https://sns-avatar-qc.xhscdn.com/avatar/5af17d79d2c8a545a48b4c08.jpg?imageView2/2/w/120/format/jpg"
                },
                "create_time"1706586052000,
                "ip_location""北京",
                "sub_comment_count""134",
                "sub_comment_has_more"true,
                "id""65b86fc4000000000803149f",
                "status"1,
                "show_tags": [],
                "sub_comments": [
                    {
                        "at_users": [],
                        "liked"false,
                        "like_count""1660",
                        "user_info": {
                            "user_id""5a7508c811be103abf6ffe8d",
                            "nickname""皮蛋瘦肉粥",
                            "image""https://sns-avatar-qc.xhscdn.com/avatar/1040g2jo30r2661ao1c004a18464chvkdgu19qdg?imageView2/2/w/120/format/jpg"
                        },
                        "create_time"1706586723000,
                        "id""65b87263000000000800966c",
                        "note_id""65b854df000000002c038f65",
                        "status"0,
                        "ip_location""湖南",
                        "content""特别还是父母都差不多时间去世的…",
                        "show_tags": [],
                        "target_comment": {
                            "id""65b86fc4000000000803149f",
                            "user_info": {
                                "user_id""54e7d8fa4fac6301aa2d708c",
                                "nickname""TY Fan",
                                "image""https://sns-avatar-qc.xhscdn.com/avatar/5af17d79d2c8a545a48b4c08.jpg?imageView2/2/w/120/format/jpg"
                            }
                        }
                    }
                ],
                "note_id""65b854df000000002c038f65",
                "liked"false,
                "at_users": [],
                "like_count""4255",
                "sub_comment_cursor""65b87263000000000800966c"
            }
        ]
    }
}

向下滑动,一直到底部出现 The End,就没有更多数据了。翻页逻辑,是通过 cursor 这个游标,控制翻页位置。有了这个 JSON,不需要再提取页面元素了。

辅助插件:油猴脚本

Automa 插件,在运行的时候,作为额外的 JavaScript 脚本,注入页面。启动顺序决定了,无法在页面加载之前,注入脚本。所以,我们引入辅助插件——“油猴脚本”。

为了获取网络请求的数据,需要对 XHR 对象进行拦截。在请求成功之后,获取响应的 JSON。

这里是一个简单的示例,只给出主要部分的代码:

自动化流程

经过以上分析,和油猴脚本JSON数据,就可以搭建自动化流程了。整个工作流的文件,我打包好了。

关注公众号,后台回复【xhs259】,获取完整资料包。

1,触发器 – 上下文菜单

除了手动触发,添加一项页面上鼠标的右键菜单。

几乎不需要配置。写一下菜单名,就好了。

2,激活当前页地址

这个流程,我们在浏览小红书笔记的时候,会用到。也就是,获取当前活动的tab页。需要添加“活动标签页”模块。

小红书的笔记详情,是根据笔记ID区分链接地址的。比如下面这样的:

https://https://www.xiaohongshu.com/explore/60001
https://https://www.xiaohongshu.com/explore/60002

我们需要获取 6000160002这个笔记ID,用于区分,哪个笔记的评论。

获取当前活动页地址,并复制给变量 currentUrl,后面的模块要用到。

3,过滤网址

限制当前工作流,仅仅作用于笔记详情URL。添加一个“条件判断”模块。使用变量值比较的方式,进行匹配。

判断条件,是当前网页链接(_上一节的 currentUrl 变量_),必须以 “explore“开头。

Automa 变量使用,需要用 双花括号 包围起来。并且,变量值引用,追加上 variables 前缀。熟悉前端的朋友,应该能看出来,Automa 其实把过程变量,赋值给了 variables 全局对象。

4,评论区元素

需要获取评论列表,前提是,确保评论区加载、显示出来了。CSS 定位元素,并用”元素存在“模块,进行判断。

5,笔记标题(可选)

这一步,是为了导出的 Excel 报表名,最终的格式像下面这些:

  • • 《#来聊聊你的副业 #创业三十六计 #干货-评论列表.csv》
  • • 《够你用一辈子的458.2G魔法灾难素材合-评论列表.csv》
  • • 《勇敢的人当然要大胆尝试各种不同的第一次-评论列表.csv》
  • • 《建一个独立站我花了多少钱?-评论列表.csv》

如果你喜欢用默认的Excel文件名,这一步略过就好了。

6,获取所有评论(重要)

这一步是最重要的。

从油猴脚本抓取到的评论,是以JSON格式存储。此处,使用 “JavaScript” 块,将数据提取出来,重新整理字段名。

创建表格,定义各个字段,以便导出时使用。定义的字段,我使用了中文名。

JavaScript 块中,下面是核心代码:

const validList = [];
comments.forEach((cm) => {

  const subs = [];
  cm.sub_comments.forEach((sc) => {
    if (sc.content != "") {
      subs.push(sc.content);
    }
  })
  
  validList.push({
   id: cm.id || "",
    content: cm.content || "",
    user_id: cm.user_info.user_id,
    user_name: cm.user_info.nickname,
    user_avatar: cm.user_info.image,
    create_time: fmt(cm.create_time),
    ip_region: cm.ip_location,
    sub_comments: subs ? subs.join("n") : "",
    ctsort: cm.create_time,
  });
});

7,写入表格

所有的数据,都准备好了,下面写入表格。

上一节,评论数据按照发布时间,升序排列,保存在 Automa 变量 allComments中。

插入数据”块,是把 allComments 元素的字段,跟表格 Table 的字段,一一对应起来。比如:

  • • {{ loopData.cmd.create_time }},对应发布时间
  • • {{ loopData.cmd.ip_region }},对应IP归属地

8,导出Excel(大功告成)

最后一步,导出Excel。

不同的笔记,标题不同,使用第5节生成的笔记标题变量——”noteTitle“,生成动态的文件名,便于记忆。

9,效果展示

首先是评论页,鼠标右键的截图。

这个是导出的Excel表,评论列表的截图。

知识点总结

本文课程,与之前不同之处,是没有提取页面,而是改为从网络请求中,直接拿到 JSON,进行解析了。所以,引入了第二个浏览器插件——“油猴”。

这里有几个关键点,大家学习的时候,多注意:

  1. 1. 油猴脚本获取的 JSON,以 {note_id: []comments} 结构,写入到 window 对象,用于组件间值传递;
  2. 2. Automa 如果使用 JavaScript 表达式,需要使用 !!{{ user_name + user_avatar }} 的结构,才能解析;
  3. 3. 鼠标右键菜单,需要浏览器授权;发送通知,成功/失败,需要浏览器授权;
  4. 4. 如果有固定 class,CSS 选择器更友好;实在不行,再用 XPath(_天书_);
  5. 5. 元素存在,应该成为你 Automa 工作流中,最常见的身影;
  6. 6. 条件判断,是基本功。我们后面,会给出大量课程,训练这个功能。

写在最后

希望我写的 Automa 课程,有更多的大学生、职场、HR、制造业、财务、公务等等行业的朋友,可以把每天的浏览器重复操作,一个小环节、一个小环节地,自动化起来。

流程自动化了,人为的疏忽、错漏,就少了。浪费的时间少了,工作更轻省,心情更加愉悦![比心]

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。