前言
上一篇文章,《办公自动化 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
我们需要获取 60001
、60002
这个笔记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. 油猴脚本获取的 JSON,以
{note_id: []comments}
结构,写入到 window 对象,用于组件间值传递; - 2. Automa 如果使用 JavaScript 表达式,需要使用
!!{{ user_name + user_avatar }}
的结构,才能解析; - 3. 鼠标右键菜单,需要浏览器授权;发送通知,成功/失败,需要浏览器授权;
- 4. 如果有固定 class,CSS 选择器更友好;实在不行,再用 XPath(_天书_);
- 5. 元素存在,应该成为你 Automa 工作流中,最常见的身影;
- 6. 条件判断,是基本功。我们后面,会给出大量课程,训练这个功能。
写在最后
希望我写的 Automa 课程,有更多的大学生、职场、HR、制造业、财务、公务等等行业的朋友,可以把每天的浏览器重复操作,一个小环节、一个小环节地,自动化起来。
流程自动化了,人为的疏忽、错漏,就少了。浪费的时间少了,工作更轻省,心情更加愉悦![比心]