// ==UserScript== // @name 小红书笔记导出 // @namespace http://www.junxiaopang.com/ // @version 1.3.1 // @description 导出小红书列表数据,方便做数据分析 // @author 俊小胖 // @match https://www.xiaohongshu.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=xiaohongshu.com // @license GPL // @require https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js // @downloadURL https://update.greasyfork.icu/scripts/496412/%E5%B0%8F%E7%BA%A2%E4%B9%A6%E7%AC%94%E8%AE%B0%E5%AF%BC%E5%87%BA.user.js // @updateURL https://update.greasyfork.icu/scripts/496412/%E5%B0%8F%E7%BA%A2%E4%B9%A6%E7%AC%94%E8%AE%B0%E5%AF%BC%E5%87%BA.meta.js // ==/UserScript== (function () { 'use strict'; let data = []; let itemNum = 0 //当前加载笔记的数量 let excel_title = '小红书数据' let likeNumLimit = 100 //导出的数据点赞数要求 let keywords = ''//过滤的关键词 // 定义一个函数来抓取数据 function fetchData() { var itemNumElement = document.getElementById('itemNum'); // 假设列表数据在某个具有特定类名的元素中 const listElements = document.querySelectorAll('.note-item'); // 需要根据实际页面结构调整选择器 const domain = 'https://www.xiaohongshu.com' listElements.forEach(item => { const linkElement = item.querySelector('a.cover.ld.mask'); //console.log(item.querySelector('.title')); if (linkElement) { const link = domain + linkElement.getAttribute('href'); // 拼接完整链接 let title = item.querySelector('.title').textContent; // 需要根据实际页面结构调整选择器 let author = item.querySelector('.author').textContent; // 需要根据实际页面结构调整选择器 let likeCount = item.querySelector('.like-wrapper').textContent; // 需要根据实际页面结构调整选择器 let links = item.querySelector('a').getAttribute('href'); // 需要根据实际页面结构调整选择器 let itemIndex = item.dataset.index ? item.dataset.index : 0 likeCount = convertToNumber(likeCount ? likeCount : 0) let itemData = [title, author, likeCount, link] data[itemIndex] = itemData } }); itemNum = data.length if (itemNumElement) { itemNumElement.textContent = itemNum; // 更新文本内容 } } //过滤点赞数限制的数据 function filterArrayByLikeNum(arr, limit) { var newArray = []; arr.forEach(function (subArray) { if (subArray[2] > limit) { newArray.push(subArray); } }); return newArray; } function containsAnyKeyword(str, keywords) { const regexPattern = `(${keywords.join('|')})`; const regex = new RegExp(regexPattern, 'i'); // 'i' 表示不区分大小写 return regex.test(str); } //过滤指定关键词 function filterArrayByTitle(arr, keywords) { var newArray = []; arr.forEach(function (subArray) { if (!containsAnyKeyword(subArray[0], keywords)) { newArray.push(subArray); } }); return newArray; } // 定义点击按钮时执行的函数 function onButtonClick() { // 在这里添加你想要执行的代码 exportArrayToExcel(data, excel_title); // fetchData() } //自定义页面样式 function addStyle() { var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.export-note{margin: 6px 0 12px 0;}.group-header-title{font-size: 16px;border-bottom: 1px solid #eee;padding: 10px 0;margin-bottom: 10px;color: rgba(51, 51, 51, 0.6);}.group-header-title a{float: right;color: #f6333b;}#itemNum{font-weight: bold;color: red;}.export-data {margin: 6px 0;display: flex;flex-wrap: wrap;flex-direction: row-reverse;border:solid 1px #eee;border-radius: 16px;padding:6px;line-height: 25px;}.export-button{text-align: center;padding:6px;border:border: 1px solid transparent;background-color:#ff2442;color:#ffffff;border-radius:5px;cursor:pointer}.input{margin: 0 4px;padding:2px 4px;border: 1px solid #ccc;border-radius: 4px;background-color: #eee;width: 60px;}'; document.head.appendChild(style); } // 动态插入