小红书收藏太多怎么办?AI一键帮我搬好分类好

9 评论 7730 浏览 18 收藏 7 分钟

最近因为原来绑定的小红书手机号不用了,我打算把旧账号里的收藏夹笔记批量导出来,却一直找不到一个好用顺手的工具。说起来,你是不是也有过类似的烦恼?收藏夹越攒越多,每次想找灵感笔记时都要翻半天,结果还是找不到。

收藏就像“黑洞”,只进不出,时间一长就成了堆满杂物的信息垃圾场……

我也被这个问题困扰了很久,直到我用AI,终于解决了它!于是我做了一个小红书收藏夹一键导出的小工具,能够自动的将你收藏夹里面的所有笔记数据导出,支持笔记标题、作者、点赞数、笔记链接、图片链接等等信息,效果长这样:

一键导出小红书收藏夹效果视频

收藏多≠有用,问题到底出在哪?

小红书的收藏功能确实很好用,点个收藏、建个文件夹,一秒钟完成。但:

文件夹数量多了,层级混乱;

内容种类杂,生活灵感、工作灵感、艺术创作、装修建议等等杂七杂八的全混在一起;

搜索功能不够强大,找一篇旧收藏要点半天。

久而久之,你会发现:“我只是习惯性收藏,但从来没回头看过它们。”

那我怎么去消费这些收藏夹的数据呢?

我做的第一件事情:把小红书收藏夹的内容导出,用AI做了“搬家+整理”处理。

要实现以上多维表格中的信息,简单来说包括几个以下步骤。

抓取收藏数据

通过第三方插件将收藏的链接、标题、封面、简介提取出来,我这里是使用了AI编程的方法给我实现了一个JavaScript脚本,直接复制直接安装在油猴脚本里面即可。当然,我也非常愿意跟你一起免费分享这个自己创作的好用工具,如果你也有需要获取同款工具可以直接在微信公众号后台回复“收藏夹”获取完整源码去使用。

在此之前需要你去Chrome应用商店里面下载一个“篡改猴”,下载地址:

https://chromewebstore.google.com/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=zh-CN&utm_source=ext_sidebar

小红书收藏太多怎么办?AI一键帮我搬好分类好

篡改猴Chrome下载地址页Chrome浏览器安装后之后,然后把这个小红书收藏夹导出的脚本文件添加到篡改后里面即可。

小红书收藏太多怎么办?AI一键帮我搬好分类好在篡改猴中添加新脚本小红书收藏太多怎么办?AI一键帮我搬好分类好

添加上我们提供的新脚本

然后进入你的小红书网页版的收藏夹界面,点击“自动滚动”即可,可以动态的看到当前获取到的笔记数量,最后一键导出即可,是不是非常方便?

小红书收藏太多怎么办?AI一键帮我搬好分类好

可以看见收藏夹插件显示出来

导入知识库

最后把整理好的内容导入到飞书文档中,选择“多维表格”结构的知识库中,真正变成“用得上的灵感库”。

小红书收藏太多怎么办?AI一键帮我搬好分类好

上传数据到多维表格

内容分类/标签补全

让AI自动识别内容主题、提取关键词等,方便后期检索。

我在多维表格里面去新增一列“字段捷径”,然后使用“自定义AI内容”进行填充,我主要写的提示词是让AI识别标题生成关键词即可,这里面还有非常多可以玩的空间,我们在接下来的飞书多维表格+字段捷径等案例里面会给大家细细道来,是一个非常棒非常方便的工具。

小红书收藏太多怎么办?AI一键帮我搬好分类好

字段捷径添加AI自动填充

AI的整理效果有多好?

举个例子,我以前的小红书收藏夹里有1000+篇笔记,现在用AI处理后变成这样:

小红书收藏太多怎么办?AI一键帮我搬好分类好

自动生成了AI分类类别

每一类都清清楚楚,甚至连标题、摘要、关键词、原链接都有留存,检索和筛选也特别方便。同时这个数据如果作为知识库数据能够被大模型学习引用到,你在搜索相关问题、生成相关内容的时候就能够更加垂直精准了!当然这里面还有非常大的用途,我们在后续的小红书各种实践案例集合里面都会慢慢用到,比如读取文章链接后解析正文内容、仿写、拆解等等,我们后面再逐步分享。

别让灵感沉没,把它们变成你的资产

收藏本身没错,关键是要让这些内容可用、可查、可激发灵感

AI带来的不是炫技,而是真正能解决“信息焦虑”的好工具。

所以,别再让你的收藏夹变成“遗忘角落”,试着动手用AI来一次“搬家整理”吧,也许你会重新发现很多当时收藏时的闪光点。

题图来自 Unsplash,基于CC0协议

本文由人人都是产品经理作者@银海,原创投稿或授权 发布于人人都是产品经理,未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 安装之后不会弹出自动滚动,是什么样的原因?

    来自广东 回复
    1. 重启一下浏览器试试,不是关闭标签页,是浏览器退出再打开同样页面

      来自中国 回复
  2. 按照老师教的流程,终于成功导出了收藏夹清单,方便了好多!!!要是点赞列表也能导出就好了

    来自广东 回复
    1. 让ai改了一版我自己跑是能成功的,试下呢?

      // ==UserScript==
      // @name 小红书点赞导出工具
      // @namespace http://tampermonkey.net/
      // @version 0.2
      // @description 自动导出小红书点赞内容为Excel格式
      // @match https://www.xiaohongshu.com/user/profile/*
      // @icon https://www.xiaohongshu.com/favicon.ico
      // @grant GM_xmlhttpRequest
      // @grant GM_addStyle
      // @require https://unpkg.com/xlsx/dist/xlsx.full.min.js
      // @author @AI产品银海 / modified by Wenke
      // ==/UserScript==

      (function() {
      ‘use strict’;

      // 存储点赞数据
      let collectedNotes = [];

      // 检测系统主题
      function isDarkMode() {
      return window.matchMedia && window.matchMedia(‘(prefers-color-scheme: dark)’).matches;
      }

      // 监听系统主题变化
      function initThemeListener(container) {
      window.matchMedia(‘(prefers-color-scheme: dark)’).addEventListener(‘change’, e => {
      updateTheme(container, e.matches);
      });
      }

      // 更新主题样式
      function updateTheme(container, isDark) {
      if (isDark) {
      container.style.background = ‘rgba(0, 0, 0, 0.7)’;
      container.style.border = ‘1px solid rgba(255, 255, 255, 0.1)’;
      } else {
      container.style.background = ‘rgba(255, 255, 255, 0.15)’;
      container.style.border = ‘1px solid rgba(255, 255, 255, 0.18)’;
      }
      }

      // 添加按钮和计数器的样式
      GM_addStyle(`
      .xhs-tool-container.dragging {
      opacity: 0.9;
      cursor: grabbing !important;
      }

      .xhs-tool-container {
      position: fixed;
      top: 20px;
      right: 20px;
      display: flex;
      flex-direction: column;
      gap: 12px;
      z-index: 9999;
      background: ${isDarkMode() ? ‘rgba(0, 0, 0, 0.7)’ : ‘rgba(255, 255, 255, 0.15)’};
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      padding: 15px;
      border-radius: 16px;
      box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
      border: 1px solid rgba(255, 255, 255, 0.18);
      cursor: grab;
      transition: all 0s ease;
      }

      .xhs-tool-container.snapping {
      transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
      }

      .xhs-tool-container:hover {
      background: rgba(255, 255, 255, 0.25);
      }

      .xhs-button {
      padding: 12px 24px;
      background: linear-gradient(135deg, #ff2442 0%, #ff4d64 100%);
      color: white;
      border: none;
      border-radius: 12px;
      cursor: pointer;
      font-size: 14px;
      font-weight: 500;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.3s ease;
      box-shadow: 0 4px 15px rgba(255, 36, 66, 0.2);
      }

      .xhs-button:hover {
      background: linear-gradient(135deg, #ff2442 0%, #ff3850 100%);
      transform: translateY(-1px);
      box-shadow: 0 6px 20px rgba(255, 36, 66, 0.3);
      }

      .xhs-button:active {
      transform: translateY(1px);
      box-shadow: 0 2px 10px rgba(255, 36, 66, 0.2);
      }

      .note-counter {
      background: rgba(0, 0, 0, 0.6);
      color: white;
      padding: 12px 24px;
      min-width: 180px;
      white-space: nowrap;
      border-radius: 12px;
      text-align: center;
      font-size: 14px;
      font-weight: 500;
      backdrop-filter: blur(5px);
      -webkit-backdrop-filter: blur(5px);
      border: 1px solid rgba(255, 255, 255, 0.1);
      letter-spacing: 0.5px;
      }

      .powered-by {
      font-size: 12px;
      color: rgba(255, 255, 255, 0.7);
      text-align: center;
      margin-top: 5px;
      }

      .powered-by a {
      color: rgba(255, 255, 255, 0.9);
      text-decoration: none;
      font-weight: 500;
      }

      .powered-by a:hover {
      text-decoration: underline;
      }
      `);

      // 创建UI元素
      function createUI() {
      const container = document.createElement(‘div’);
      container.className = ‘xhs-tool-container’;

      // 创建计数器
      const counter = document.createElement(‘div’);
      counter.className = ‘note-counter’;
      counter.textContent = ‘已获取点赞笔记:0’;
      counter.id = ‘note-counter’;

      // 创建导出按钮
      const exportButton = document.createElement(‘button’);
      exportButton.className = ‘xhs-button’;
      exportButton.textContent = ‘导出点赞’;
      exportButton.addEventListener(‘click’, exportToExcel);

      // 创建自动滚动按钮
      const scrollButton = document.createElement(‘button’);
      scrollButton.className = ‘xhs-button’;
      scrollButton.textContent = ‘自动滚动获取’;
      scrollButton.id = ‘xhs-scroll-button’;
      scrollButton.addEventListener(‘click’, toggleAutoScroll);

      // 创建”Powered by”元素
      const poweredBy = document.createElement(‘div’);
      poweredBy.className = ‘powered-by’;
      poweredBy.innerHTML = ‘Powered by @AI产品银海‘;

      container.appendChild(counter);
      container.appendChild(exportButton);
      container.appendChild(scrollButton);
      container.appendChild(poweredBy);
      document.body.appendChild(container);
      }

      // 自动滚动相关变量和函数
      let isAutoScrolling = false;
      let scrollInterval;

      function toggleAutoScroll() {
      const scrollButton = document.getElementById(‘xhs-scroll-button’);

      if (isAutoScrolling) {
      stopAutoScroll();
      scrollButton.textContent = ‘自动滚动获取’;
      scrollButton.style.background = ‘linear-gradient(135deg, #ff2442 0%, #ff4d64 100%)’;
      } else {
      startAutoScroll();
      scrollButton.textContent = ‘停止滚动’;
      scrollButton.style.background = ‘linear-gradient(135deg, #666 0%, #888 100%)’;
      }

      isAutoScrolling = !isAutoScrolling;
      }

      function startAutoScroll() {
      scrollInterval = setInterval(() => {
      window.scrollTo(0, document.documentElement.scrollHeight);
      }, 1000);
      }

      function stopAutoScroll() {
      if (scrollInterval) {
      clearInterval(scrollInterval);
      }
      }

      // 拦截 XHR 请求
      function interceptXHR() {
      const originalOpen = XMLHttpRequest.prototype.open;

      XMLHttpRequest.prototype.open = function(method, url) {
      if (typeof url === ‘string’ && url.includes(‘api/sns/web/v1/note/like/page’)) {
      this.addEventListener(‘load’, function() {
      try {
      const response = JSON.parse(this.responseText);

      if (response.success && response.data && response.data.notes) {
      processNotes(response.data.notes);
      }
      } catch (error) {
      console.error(‘解析XHR响应数据失败:’, error);
      }
      });
      }

      return originalOpen.apply(this, arguments);
      };
      }

      // 拦截 Fetch 请求
      function interceptFetch() {
      const originalFetch = window.fetch;

      window.fetch = async function(url, options) {
      const response = await originalFetch.apply(this, arguments);

      try {
      const requestUrl = typeof url === ‘string’ ? url : url.url;

      if (requestUrl && requestUrl.includes(‘api/sns/web/v1/note/like/page’)) {
      response.clone().json().then(data => {
      if (data.success && data.data && data.data.notes) {
      processNotes(data.data.notes);
      }
      }).catch(error => {
      console.error(‘解析Fetch响应数据失败:’, error);
      });
      }
      } catch (error) {
      console.error(‘Fetch拦截处理失败:’, error);
      }

      return response;
      };
      }

      // 处理笔记数据
      function processNotes(notes) {
      const counter = document.getElementById(‘note-counter’);

      notes.forEach(note => {
      const processedNote = {
      note_id: note.note_id || ‘Unknown’,
      xsec_token: note.xsec_token || ‘Unknown’,
      display_title: note.display_title || ‘Unknown’,
      user_id: note.user?.user_id || ‘Unknown’,
      nickname: note.user?.nickname || ‘Unknown’,
      avatar: note.user?.avatar || ‘Unknown’,
      liked_count: note.interact_info?.liked_count || ‘Unknown’,
      cover_url_pre: note.cover?.url_pre || ‘Unknown’,
      cover_url_default: note.cover?.url_default || ‘Unknown’,
      request_url: `https://www.xiaohongshu.com/explore/${note.note_id}?xsec_token=${note.xsec_token}&xsec_source=pc_user_like`
      };

      // 避免重复添加
      if (!collectedNotes.some(n => n.note_id === processedNote.note_id)) {
      collectedNotes.push(processedNote);
      }
      });

      // 更新计数器
      if (counter) {
      counter.textContent = `已获取点赞笔记:${collectedNotes.length}`;
      }
      }

      // 导出为Excel
      function exportToExcel() {
      if (collectedNotes.length === 0) {
      alert(‘暂未获取到点赞数据。请先进入小红书个人主页的“赞过/点赞”页面,并滚动加载内容。’);
      return;
      }

      const worksheet = XLSX.utils.json_to_sheet(collectedNotes);
      const workbook = XLSX.utils.book_new();

      XLSX.utils.book_append_sheet(workbook, worksheet, ‘点赞’);

      // 设置列宽
      const columnWidths = [
      {wch: 30}, // note_id
      {wch: 50}, // xsec_token
      {wch: 40}, // display_title
      {wch: 30}, // user_id
      {wch: 15}, // nickname
      {wch: 50}, // avatar
      {wch: 10}, // liked_count
      {wch: 50}, // cover_url_pre
      {wch: 50}, // cover_url_default
      {wch: 100} // request_url
      ];

      worksheet[‘!cols’] = columnWidths;

      // 导出文件
      const dateText = new Date().toLocaleDateString().replace(/\//g, ‘-‘);
      const fileName = `小红书点赞_${dateText}.xlsx`;

      XLSX.writeFile(workbook, fileName);
      }

      // 拖动相关功能
      function initDraggable(container) {
      let isDragging = false;
      let currentX;
      let currentY;
      let initialX;
      let initialY;
      let xOffset = 0;
      let yOffset = 0;

      // 从localStorage获取上次位置
      const savedPosition = localStorage.getItem(‘xhs-tool-position’);

      if (savedPosition) {
      try {
      const { x, y } = JSON.parse(savedPosition);
      container.style.right = ‘auto’;
      container.style.left = x + ‘px’;
      container.style.top = y + ‘px’;
      xOffset = x;
      yOffset = y;
      } catch (error) {
      console.error(‘恢复位置失败:’, error);
      }
      }

      function dragStart(e) {
      if (e.target.tagName === ‘BUTTON’) return;

      const rect = container.getBoundingClientRect();

      xOffset = rect.left;
      yOffset = rect.top;

      initialX = e.clientX – xOffset;
      initialY = e.clientY – yOffset;

      if (e.target === container || e.target.className === ‘note-counter’) {
      isDragging = true;
      container.classList.add(‘dragging’);
      }
      }

      function dragEnd() {
      if (!isDragging) return;

      initialX = currentX;
      initialY = currentY;
      isDragging = false;
      container.classList.remove(‘dragging’);

      // 添加吸附动画类
      container.classList.add(‘snapping’);

      // 磁吸效果
      const rect = container.getBoundingClientRect();
      const viewportWidth = window.innerWidth;
      const viewportHeight = window.innerHeight;
      const threshold = 100;
      const safeDistance = 20;

      let targetX = currentX;
      let targetY = currentY;

      // 只允许左右两边吸附
      if (rect.left viewportWidth – threshold) {
      targetX = viewportWidth – rect.width – safeDistance;
      } else if (rect.left < viewportWidth / 2) {
      targetX = safeDistance;
      } else {
      targetX = viewportWidth – rect.width – safeDistance;
      }

      // 垂直方向保持原位置,只做边界检查
      if (currentY viewportHeight – rect.height – safeDistance) {
      targetY = viewportHeight – rect.height – safeDistance;
      }

      currentX = targetX;
      currentY = targetY;

      setTimeout(() => {
      container.classList.remove(‘snapping’);
      }, 300);

      localStorage.setItem(‘xhs-tool-position’, JSON.stringify({
      x: currentX,
      y: currentY
      }));

      setTranslate(currentX, currentY, container);
      }

      function drag(e) {
      if (!isDragging) return;

      e.preventDefault();

      currentX = e.clientX – initialX;
      currentY = e.clientY – initialY;

      const rect = container.getBoundingClientRect();
      const viewportWidth = window.innerWidth;
      const viewportHeight = window.innerHeight;
      const safeDistance = 20;

      if (currentX < safeDistance) currentX = safeDistance;
      if (currentY viewportWidth – rect.width – safeDistance) {
      currentX = viewportWidth – rect.width – safeDistance;
      }

      if (currentY > viewportHeight – rect.height – safeDistance) {
      currentY = viewportHeight – rect.height – safeDistance;
      }

      xOffset = currentX;
      yOffset = currentY;

      container.classList.remove(‘snapping’);
      setTranslate(currentX, currentY, container);
      }

      function setTranslate(xPos, yPos, el) {
      el.style.left = `${xPos}px`;
      el.style.top = `${yPos}px`;
      el.style.right = ‘auto’;
      }

      container.addEventListener(‘mousedown’, dragStart);
      document.addEventListener(‘mousemove’, drag);
      document.addEventListener(‘mouseup’, dragEnd);
      }

      // 初始化
      function init() {
      createUI();
      interceptXHR();
      interceptFetch();

      const container = document.querySelector(‘.xhs-tool-container’);

      if (container) {
      initDraggable(container);
      updateTheme(container, isDarkMode());
      initThemeListener(container);
      }
      }

      // 等待页面加载完成后初始化
      if (document.readyState === ‘loading’) {
      document.addEventListener(‘DOMContentLoaded’, init);
      } else {
      init();
      }
      })();

      来自北京 回复
  3. 老师我安装好打开之后,不会弹出自动滚动,还什么原因呀

    来自浙江 回复
    1. 我也是

      来自浙江 回复
    2. 重启一下浏览器试试,不是关闭标签页,是浏览器退出再打开同样页面

      来自中国 回复
  4. 脚本怎么不放出来呢?

    来自广东 回复
    1. 作者放夸克网盘了。链接:https://pan.quark.cn/s/72c83db58a8c

      来自广东 回复