信息流
每周信息梳理
-
上周
-
时间花费
-
没有每天看新闻, 之前我都有每天看 folo 的习惯
-
但是考虑到信息焦虑, 我依然开始使用 perplexity 看信息, 然而这比我之前花费的时间少多了
-
但是我依然在看 bili, 看 zhihu
-
对于 bili, 我认为这个平台已经没有优质内容了, 即使有, 也是藏在一堆 💩 里面, 要找到这些, 就必须先找 💩, 里面更多的是用夸张手法讲述一些何不食肉糜的东西, 或者整活, 或者搞慈善, 都是一些消费人群注意力, 消费人群同情心的内容, 而不是真正给人带来快乐
- 在这个平台我无法得到优质信息, 而一些分析国际形势的博主比如小王, 比如玉渊谭天, 做的视频越来越水并且慢慢靠近主流价值观, 在我看来, 获取信息的密度和有效性不如我在 perplexity 上面问两下
-
对于 zhihu
-
那真是烂中烂, 热搜上十个热搜, 可能就两三个实时, 其他的是"假如...", "为什么年轻人...", 这种意淫以及以偏概全的内容
-
但是这个平台很奇葩, 一方面大量无法自主思考, 情绪发言的用户能够获得评论权, 一方面又有大量的高知分子在里面解答问题, 而通过权重, 将评论发言分层, 让大家进入一个回答, 首先看到的就是经过思考后的内容, 但是一旦往下翻, 就会发现逐渐主观化和情绪化
-
所以我建议找到领域内博主, 使用油猴插件找到博主的所有的信息
-
这里分享我用 ai 写的一个脚本
-
实测很好用
-
// ==UserScript== // @name 知乎用户内容爬取器 (全自动网页解析版) // @namespace http://tampermonkey.net/ // @version 2025.06.19.8 // @description 一键全自动抓取用户所有回答、文章和想法。通过模拟滚动和跨页面状态管理,实现全自动流程。已修复文章URL路径及404页面中断问题。 // @author Gemini // @match https://www.zhihu.com/people/*/* // @icon https://static.zhihu.com/static/favicon.ico // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @require https://cdn.jsdelivr.net/npm/turndown/dist/turndown.js // @require https://cdn.jsdelivr.net/npm/showdown/dist/showdown.min.js // ==/UserScript== (function() { 'use strict'; // --- 初始化服务 --- const turndownService = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' }); const showdownConverter = new showdown.Converter(); // --- UI界面 --- function setupUI(job) { if (!document.getElementById('crawler-panel')) { GM_addStyle(` #crawler-panel { position: fixed; bottom: 20px; right: 20px; width: 220px; background-color: #f9f9f9; border: 1px solid #ccc; border-radius: 8px; z-index: 9999; padding: 15px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); font-size: 14px; color: #333; display: flex; flex-direction: column; gap: 10px; } #crawler-btn, #crawler-cancel-btn { border: none; padding: 10px; border-radius: 5px; cursor: pointer; font-weight: bold; transition: background-color 0.3s; } #crawler-btn { background-color: #0084ff; color: white; } #crawler-cancel-btn { background-color: #e74c3c; color: white; } #crawler-btn:disabled { background-color: #ccc; cursor: not-allowed; } #crawler-status { text-align: center; font-weight: 500; color: #555; word-wrap: break-word; min-height: 2em; display: flex; align-items: center; justify-content: center; } `); const panel = document.createElement('div'); panel.id = 'crawler-panel'; document.body.appendChild(panel); } const panel = document.getElementById('crawler-panel'); if (job && job.isRunning) { const currentSectionName = getSectionName(job.targetSections[job.currentSectionIndex]); panel.innerHTML = ` <div id="crawler-status">全自动抓取进行中...<br>当前目标: <strong>${currentSectionName}</strong></div> <button id="crawler-cancel-btn">取消任务</button> `; panel.querySelector('#crawler-cancel-btn').addEventListener('click', cancelJob); } else { panel.innerHTML = ` <div id="crawler-status">准备就绪</div> <button id="crawler-btn">开始全自动抓取</button> `; panel.querySelector('#crawler-btn').addEventListener('click', startFullAutomation); } } // --- 核心状态管理和抓取逻辑 --- // 页面加载时的主入口函数 async function main() { const job = GM_getValue('scrapingJob', null); if (job && job.isRunning) { // 【修复 1】: 检查404页面 if (document.querySelector('.ErrorPage-title')) { console.log("知乎爬取器: 检测到404页面,自动跳过。"); updateStatus('页面不存在(404),自动跳过...'); const expectedType = job.targetSections[job.currentSectionIndex]; job.scrapedData[expectedType] = `## ${getSectionName(expectedType)}\n\n该用户没有发表过任何内容,或该页面不存在(404 Not Found)。\n\n---\n\n`; job.currentSectionIndex++; GM_setValue('scrapingJob', job); if (job.currentSectionIndex >= job.targetSections.length) { finishJob(job); } else { navigateToNextSection(job); } return; // 结束在404页面的所有操作 } // 检查任务是否对当前用户有效 const currentUserId = window.location.pathname.split('/')[2]; if (job.userId !== currentUserId) { alert('检测到其他用户的抓取任务,已自动取消。'); cancelJob(); return; } } setupUI(job); if (job && job.isRunning) { await runAutomatedTask(job); } } // 启动全自动流程 function startFullAutomation() { if (!confirm('即将开始全自动抓取所有内容(回答、文章、想法)。期间页面会自动跳转,请勿关闭。要开始吗?')) { return; } const job = { isRunning: true, // 【修复 2】: 更新文章区路径为 'posts' targetSections: ['answers', 'posts', 'pins'], currentSectionIndex: 0, username: document.querySelector('.ProfileHeader-name')?.innerText || '未知用户', userId: window.location.pathname.split('/')[2], scrapedData: {} }; GM_setValue('scrapingJob', job); navigateToNextSection(job); } // 执行单个页面的自动化任务 async function runAutomatedTask(job) { const pageType = getCurrentPageType(); const expectedType = job.targetSections[job.currentSectionIndex]; if (pageType !== expectedType) { navigateToNextSection(job); return; } try { const mdContent = await scrapeCurrentPage(); job.scrapedData[pageType] = mdContent; job.currentSectionIndex++; GM_setValue('scrapingJob', job); if (job.currentSectionIndex >= job.targetSections.length) { finishJob(job); } else { navigateToNextSection(job); } } catch (e) { alert(`抓取过程中发生严重错误: ${e.message}。任务已取消。`); console.error(e); cancelJob(); } } function finishJob(job) { updateStatus('所有内容抓取完毕!正在合并...'); const finalContent = combineAllData(job); downloadAsMarkdown(finalContent, `${job.username}_知乎合集`); cancelJob(); // 清理任务 // 延迟更新UI,避免“下载完成”消息一闪而过 setTimeout(() => { if (document.getElementById('crawler-panel')) { updateStatus('全部完成!文件已下载。'); } }, 1000); } // 用于抓取当前页面的函数 async function scrapeCurrentPage() { const pageType = getCurrentPageType(); const sectionName = getSectionName(pageType); updateStatus(`正在加载【${sectionName}】,请稍候...`); await new Promise(resolve => { let lastHeight = 0; const interval = setInterval(() => { window.scrollTo(0, document.body.scrollHeight); if (document.querySelector('.List-item-end')) { clearInterval(interval); resolve(); return; } const currentHeight = document.body.scrollHeight; if (currentHeight === lastHeight) { clearInterval(interval); resolve(); } else { lastHeight = currentHeight; } }, 1000); }); updateStatus('正在展开所有“阅读全文”...'); document.querySelectorAll('.ContentItem-more, .Button.RichContent-collapsedText').forEach(b => b.click()); await new Promise(r => setTimeout(r, 1000)); updateStatus(`正在解析所有【${sectionName}】...`); let sectionContent = `## ${sectionName}\n\n`; const items = document.querySelectorAll('.List-item'); if (items.length === 0) return `## ${sectionName}\n\n该用户没有发表过任何${sectionName}。\n\n---\n\n`; for (const item of items) { const parsedMd = parseItemToMarkdown(item, pageType); if (parsedMd) sectionContent += parsedMd; } return sectionContent + '\n---\n\n'; } // 解析单个DOM节点为Markdown function parseItemToMarkdown(item, type) { try { let title = '', url = '', contentHtml = '', voteup = 'N/A'; let md = ''; const voteupElement = item.querySelector('.VoteButton--up'); if (voteupElement) voteup = voteupElement.ariaLabel.replace(/[^0-9]/ig, "") || '0'; const contentElement = item.querySelector('.RichContent-inner, .Post-RichTextContainer'); if (contentElement) contentHtml = contentElement.innerHTML; const linkElement = item.querySelector('.ContentItem-title a, .Post-Title a'); if (linkElement) url = linkElement.href; switch (type) { case 'answers': title = item.querySelector('.ContentItem-title a')?.innerText; if (!title) return null; md += `### Q: [${title}](${url})\n\n**赞同数:** ${voteup}\n**回答链接:** ${item.querySelector('.ContentItem-meta a.Link--primary')?.href}\n\n`; break; case 'posts': // 更新文章选择器 title = item.querySelector('.Post-Title a')?.innerText; if (!title) return null; md += `### 📄 [${title}](${url})\n\n**赞同数:** ${voteup}\n\n`; break; case 'pins': md += `### 📌 想法\n\n**赞同数:** ${voteup}\n`; const pinUrl = item.querySelector('.ContentItem-meta a.Link--primary')?.href; if (pinUrl) md += `**想法链接:** ${pinUrl}\n\n`; break; } if (contentHtml) md += turndownService.turndown(showdownConverter.makeHtml(contentHtml)); return md + '\n\n---\n\n'; } catch (e) { return `\n\n> [!] 此项目解析失败\n\n---\n\n`; } } // --- 辅助及工具函数 --- function navigateToNextSection(job) { const nextSection = job.targetSections[job.currentSectionIndex]; const url = `https://www.zhihu.com/people/${job.userId}/${nextSection}`; updateStatus(`即将跳转到【${getSectionName(nextSection)}】页面...`); setTimeout(() => { window.location.href = url; }, 2000); } function combineAllData(job) { let finalContent = `# ${job.username} 的知乎内容合集\n\n`; job.targetSections.forEach(section => { if (job.scrapedData[section]) { finalContent += job.scrapedData[section]; } }); return finalContent; } function cancelJob() { GM_deleteValue('scrapingJob'); location.reload(); } function updateStatus(message) { const statusEl = document.getElementById('crawler-status'); if (statusEl) statusEl.innerHTML = message.replace('\n', '<br>'); } function getSectionName(type) { return { answers: '回答', posts: '文章', pins: '想法' }[type] || '未知'; } function getCurrentPageType() { const path = window.location.pathname; if (path.endsWith('/answers')) return 'answers'; if (path.endsWith('/posts')) return 'posts'; // 识别/posts if (path.endsWith('/articles')) return 'posts'; // 兼容旧的/articles if (path.endsWith('/pins')) return 'pins'; return 'unknown'; } function downloadAsMarkdown(content, filename) { const safeFilename = filename.replace(/[/\\?%*:|"<>]/g, '-'); const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' }); const dataUrl = URL.createObjectURL(blob); const a = document.createElement('a'); const date = new Date(); const dateStr = `${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}`; a.href = dataUrl; a.download = `${safeFilename}_${dateStr}.md`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(dataUrl); } // --- 脚本启动 --- setTimeout(main, 1000); })();
-
-
-
-
-
自我情绪化内容说多了, 其实就一个, 在这些平台, 我们是信息的被动接受者, 我是一个容易情绪化的人, 我不喜欢被带着跑, 所以我选择主动选择信息而不是被动接受信息
-
-
-
心得
-
上周也没看多少新闻
-
但是日常生活没有更多影响, 我的阅读注意力都在微信读书和思源笔记里面, 感觉很舒服
-
并且我也没有显现一些信息焦虑, 因为我本来就知道这些信息是可以不看的
- 所以, 对于信息, 我们需要筛选, 筛选我们是否需要知道它
-
-
对于原有的信息流程, 虽然每天接收的信息很多, 但大部分是没有用的, 看了以后没有思考, 就记住有这件事, 并且占用了我们获取自己信息的时间,这是不健康的
-
-
-
本周
-
这周梳理信息之后, 我发现信息太庞大了
-
-
太多内容了, 难以梳理, 得找办法了
-
ai 问题解决
-
我的流程
-
材料收集
-
首先处理材料, 在 folo 中游览信息内容, 然后找到需要泛读和需要精读的, 存储起来
- 使用 siyuan 剪切, 这时候能够自动打标
-
-
材料处理
- 接着在思源中使用数据库进行梳理, 直接使用动态数据库自动添加信息内容
- 并且对信息内容进行打标处理, 分为精读, 泛读(在材料收集阶段, 就已经过滤了不值得看的了)
-
材料阅读
-
对于材料要用这几个方法阅读
- 带着问题去读
- 原子化阅读, 遇到有效新闻, 则使用标记, 自动标记句子, 然后使用 sql 将这些标记摘取
- 重新叙述并且关联, 将这个信息和其他信息进行双向关联, 比如使用双向链接
-
-
-
-
-
-
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于