作用:存储采集的笔记,可以看作是一个数据库,放数据的空间。
1.去飞书开放平台(https://open.feishu.cn/app?lang=zh-CN),新建一个应用。
2.进入应用右侧的权限管理
,开通多维表格
和云文档
两个的全部权限。
3.创建版本并发布应用。
4.在凭证与基础信息
获取 AppId
和 AppSecret
。
5.新建一个多维表(https://sxuwebtech.feishu.cn/base)。
6.给多维表添加应用。
7.获取多维表格ID
就这样我们得到了AppId
,AppSecret
以及多维表格ID
。
AppId
:
AppSecret
:
多维表格ID
:
具体设置如下:
找到建立多维表格链接
指令。
使用列出记录(视图)
获取多维表内容。
使用json数据提取
提取具体的列的内容。
可以通过打印日志查看是否成功了解。
新建一个全局变量排序方式,并且为其赋值初始化时的排序方式,在后续会需要。
使鼠标停在筛选
的按钮上才会出现选项。
捕获筛选条件,并且在文本匹配中使用全局变量
。
使用循环获取列表(Web)
获取每个笔记,然后点击循环的笔记,使用获取网页信息
,获取每个笔记的链接+关闭当前笔记,就使用获取到了每个笔记的网站。
判断获取的笔记是否在多维表中,如果包含,则打印日志,关闭笔记,进行下一次循环,如果不存在,则进行操作。
注意:如果数量实际为0,那么捕获的是文字——"点赞","收藏","评论",将其赋值为0。
获取笔记是图片还是视频可以通过笔记左侧展示的格式来判断,使用 if网页包含指令
可以做到这个功能,初始化为视频类型,如果包含图文的则为图文类型,否则为视频类型。
通过获取笔记封面,分析源码可知,通过src可以获取到封面链接。
使用魔法指令对日期进行提取与处理,我的提示词如下:
对捕获的信息进行日期提取,以及转换,依据当前时间转换
在编辑于 昨天 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分钟前等,根据当前时间,判断对于的输出日期
也可以选择使用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}")
要对作者信息采集,需要先把鼠标悬浮在作者的头像或者名字上。
获取网页链接地址,通过分析可知,获取的为相对链接,使用需要在变量前面加入https://www.xiaohongshu.com
。
同样获取属性src。
使用无限循环采集笔记直到采集到我们要的数量。
在循环的外围设置已采集笔记数量,在每次循环相似元素的最后,进行整数加1,并且判断是否达到采集的数量要求,如果达到则退出循环,在无限循环里同理设置判断是否达到采集的数量要求,如果没,则滚动网页,继续采集。
到目前已收集:笔记链接,标题,正文,点赞数,评论数,收藏数,笔记类型,笔记封面图,发布时间,作者名称,作者主页链接,作者头像链接,作者简介,作者关注数,作者粉丝数,作者获赞与收藏数,关键词
在数量+1前,新建一个字典。
为每个增加键值对。
最后对我们的指定表添加记录。
经过运行可以发现笔记标题
,作者简介
,以及笔记正文
等,可以为空,即捕获不到,所以在高级设置把他们等待时间设置为3s以及报错是执行的操作为:忽略异常,继续程序
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。