
上个月我把浏览器收藏夹整个导出一共四千多条书签导出的 HTML 文件有 6MB 多。我花了一个周末做死链巡检结果能正常打开的不到三成剩下的要么域名已经过期要么打开就是满屏弹窗加立即下载客户端。这件事让我意识到收藏这个动作本身是廉价的真正贵的是收藏之后还敢不敢直接用。于是我重新做了一遍减法把一个塞满了各种链接的仓库压缩成一份只有 71 个入口的清单覆盖从吃喝玩乐到学习工作的主要场景。这篇就聊这份清单是怎么筛出来的、每一类留了多少个名额、每个名额为什么留下以及怎么把这份清单维护成一套能长期用的索引而不是又一次三个月后就烂掉的收藏夹。不管你是刚养成收藏习惯的新手还是收藏夹已经爆掉的老手下面这套筛选标准和管理方法都能直接抄。1. 良心这两个字我拆成了 6 个可打分的指标1.1 六项硬指标与对应的判断方法良心网站这个词被用得太泛了泛到几乎等于我用着还行。想要把 71 个名额花得不后悔第一步是把感觉翻译成标准。我给自己定了六项硬指标每项 0 到 2 分满分 12 分低于 8 分的一律不进主清单。指标怎么判断不合格的典型表现免登录可用无痕窗口打开直接操作核心功能点第一个按钮就弹登录墙无强制下载看首屏有没有诱导安装打开三秒弹出客户端安装包广告干扰度首屏可视区域内广告占比正文被浮层挡掉一半结果可导出找导出/复制/打印入口数据只能看拿不走长期可访问看站点是否有备案信息、更新日志域名一年一换内容停在几年前无捆绑陷阱点下载看实际拿到什么装一个来三个卸载还留残留这套打分表最大的价值不是评分本身而是逼你在收藏之前真的打开看一眼。我做过统计四千多条书签里有超过一千二百条我从收藏那天起就再也没打开过第二次。也就是说当初那个先存着以后再看的念头命中率不到三成。打分的时候有个小技巧用无痕窗口打开。很多人抱怨某个站老是让我登录其实是因为主浏览器里存着登录态你根本感知不到它在偷偷引导。无痕窗口相当于把你的使用环境重置成第一次访问的陌生人这个站对陌生人的态度才是它真实的产品态度。我靠这一招筛掉了将近四十个候选站其中不少在正常窗口下体验极好一到无痕窗口就变成请先注册。1.2 为什么免登录可用被我排在第一位六个指标里免登录是我唯一设成一票否决的。原因很实际登录态是一种隐性成本它把你的使用行为绑定在一个账号上而这个账号随时可能因为各种原因失效。工具类站点尤其明显一个只用来压缩图片的地方凭什么要我留手机号。更麻烦的是登录态会污染你的判断。登录之后你看到的是个性化推荐是为你精选是去掉了广告的会员视图。这时候你觉得这个站真好用但如果它哪天开始收费你会发现你从来没真正评估过它的基础功能。无痕窗口下的体验才是它的底线底线够用的站登录之后只会更好底线不能用的站登录只是把问题延后。这条标准也顺带解决了一个长期困扰账号疲劳。我现在的原则是只有需要长期保存个人数据比如笔记、代码仓库、书单的站点才注册账号一次性的工具类操作一律游客模式。这条原则执行下来我常用站点的注册账号从一百多个降到了二十个以内每年清理过期账号的时间从半天缩短到十分钟。1.3 三档分类法S 档常用、A 档备用、B 档直接删打分之后不要急着排序先分档。我的分法是按打开频率而不是功能强弱S 档每周至少用一次直接放进书签栏一键可达。这一档最终只有 12 个左右是真正撑起日常的那批。A 档每月用一到两次放进二级目录需要时搜关键词。这一档大约 40 个是清单的主体。B 档一年用不到三次不管功能多强直接删。这一档删掉了上千条。这里有个反直觉的结论功能最全的站往往进不了 S 档。因为功能全意味着操作路径长我打开一个站是为了三十秒内解决一件事不是为了在里面逛。最后留在 S 档的几乎都是打开即用、用完即关的单功能页面。那些功能大而全的综合平台反而大多落在 A 档一个月想起来一次。2. 71 个名额的分配逻辑2.1 四类场景的配额表先把名额分下去再往里填内容。这个顺序很重要因为人是先有分类焦虑再有选择困难。我的配额是这么切的类别名额占比主要解决什么吃喝玩乐2028%决策疲劳今天吃什么、周末去哪学习提升2738%从通识输入到技能输出的完整链路效率工具1825%一天要用三次以上的高频小操作兜底位68%留给会变的、临时性的、新冒出来的需求学习类拿到的名额最多38%这个比例是我有意压上去的。因为吃喝玩乐那类站点的替代性极强少一个顶多多花五分钟搜一次而学习类站点的门槛高一个好用的文献检索入口和一个难用的效率差的是十倍。工具类排在第三是因为工具类的需求高度集中十八个位置基本能覆盖九成日常操作再多就是重复建设。2.2 吃喝玩乐给 20 个而不是 5 个的真实原因很多人会觉得娱乐类留二十个太多了。我一开始也这么想后来发现这类站点的使用场景是碎片化的而且极度依赖当下情境。找菜谱、查潮汐、看月相、算配速、找露营地、比票价这六件事分别对应六个完全不同的入口你没法用一个综合站把它们全包了硬包的结果就是每个都做得半吊子。更重要的是这类站点的时效性最强。一家店还在不在、一条步道封没封、一场演出还有没有票这些信息的有效期可能只有几天。所以我在这一类里专门留了两个机动位不做固定绑定随时替换成当下用得上的站点。这个设计来源于一次很尴尬的经历我按一份两年前的攻略去爬山到了山脚才发现入口因为施工封了半年而攻略里推荐的实时路况查询站早就打不开了。2.3 被砍掉的三类伪需求减法比加法难但必须做。我砍掉的三类最典型第一类是**资源聚合站**。这类站看起来什么都有影视、书籍、课程一网打尽实际上每一个单项都不如专门的站点做得好而且死链率极高。我统计过自己收藏的十几个聚合站两年后还能正常打开的不超过三个。第二类是**AI 工具导航站**。这两年这类站像雨后春笋但它们的问题是内容同质化严重而且更新速度跟不上模型迭代。真正好用的 AI 工具口碑传播的速度远快于导航站收录的速度你从导航站找到的往往是三个月前的热点。第三类是**教程合集站**。这类站最大的坑是版本陈旧。编程类教程尤其明显一篇三年前的教程可能连环境都装不上。真要用不如直接去官方文档虽然读起来枯燥但至少不会把你带到沟里。3. 吃喝玩乐这 20 个解决的是决策疲劳3.1 找吃的从探店榜单转向原料加做法这一类我最终只留了六个而且重心明显从去哪吃偏向了怎么做。原因很实在探店榜单的公信力这几年掉得太快你很难判断一条好评是真食客写的还是投放的。相比之下菜谱站的判断标准清晰得多——做出来好不好吃你自己就能验证。挑菜谱站我看三点。**第一能不能按食材反查。**冰箱里剩半颗白菜和两个鸡蛋你需要的不是白菜的 100 种做法而是输入白菜加鸡蛋告诉我能做什么。支持多食材反查的站实用度直接翻倍。**第二有没有计量单位换算。**中餐菜谱里适量少许这类词是新手杀手好的站会把克数、勺数、毫升数并列给出甚至提供按份量缩放的换算器。**第三也是最重要的评论区有没有人反馈失败原因。**我见过太多菜谱正文写得漂亮评论第一条就是按这个比例做出来齁咸。真正有价值的不是正文而是评论区里那句糖减半、盐减三分之一。注意菜谱站的时间标注经常偏乐观。标20 分钟的菜新手实际做出来往往要 40 分钟因为洗切备料的时间没算进去。第一次做某道菜把标称时间乘以 1.8 来安排基本不会翻车。实操上我还有个习惯遇到做得成功的菜不收藏整个页面而是把关键参数抄进自己的笔记里——主料克数、调料比例、火候、时长。页面会挂笔记不会。我现在的菜谱笔记一共四十多条全是这种三行摘要格式比收藏夹好用得多。3.2 出门玩天气、潮汐、月相、光污染这一类留了六个全是出门前的信息核对工具。听起来冷门但只要你有过一次被雨浇透或者白跑一趟的经历就知道这几个位置花得值。**天气这块不要只看日常天气应用。**真正有用的指标是逐小时降水概率和阵风风速。日常应用给你的是明天多云而你需要的是下午三点到五点降水概率 60%阵风 7 级。后者直接决定你带不带伞、去不去山顶。我一般会交叉看两个来源一个给逐小时数据一个给雷达回波图两者不一致的时候以雷达图为准因为它离实时更近。**潮汐和月相这两类是海边和夜爬的刚需。**潮汐表要看的是高低潮时刻加潮高很多人只看涨潮退潮四个字结果到了海边发现退潮时段正好在半夜。月相则直接影响夜间活动的照明条件满月前后夜路好走新月前后适合看星星——顺便说一句看星星还得看光污染等级这个数据在专门的光污染地图上能查到用颜色分级一目了然。**路线和海拔这类我留了两个。**一个用来看坡度剖面一个用来看等高线。为什么需要坡度剖面因为同样十公里平路和爬升八百米完全是两个概念。提前看一眼剖面上的陡坡段在哪能帮你决定在哪休息、带多少水。这个信息在很多路线详情里是藏着的需要主动去找。提示出门前的核对清单建议固定成五项——降水概率、风速、气温区间、日照时间、返程末班时间。这五项过一遍九成的行程翻车能提前避免。3.3 娱乐消费票务、二手、影单与游戏折扣这一类留了四个共同点是能省钱或者能省时间。票务这块的判断标准很简单有没有明确的手续费说明和退改规则。很多票务页面把价格标得很漂亮点进去才发现服务费加了一截退款还要扣一笔。我现在的做法是下单前一定要走到支付前的最后一步看清总价这一步能省掉不少糟心。二手这块我留的是一个能看历史成交价的入口。这个功能太关键了卖家的标价没有参考价值历史成交价才是真实行情。买之前查一下同款最近成交在什么区间报价高了三成以上直接跳过省下的时间比砍价省下的钱更值钱。影单这一块我留的是能按时长、年份、评分人数多重筛选的站。为什么强调评分人数因为小样本评分极不靠谱一部只有三十个人打分的片子可以轻松刷到 9 分。设定评分人数大于一定阈值再排序命中率会高很多。游戏折扣那块同理重点不是打几折而是这个价格是不是历史最低后者才决定你要不要现在买。3.4 这一类最容易踩的三个坑第一个坑是把导航站当入口站。导航站本身不产生内容它的价值全在收录质量上而收录质量是会衰减的。我现在的做法是导航站最多留一个用来发现新东西日常使用一律直达具体站点。第二个坑是忽略移动端体验。很多站在电脑上做得精美手机打开排版全乱。而吃喝玩乐这类需求八成发生在外面、发生在手机上。判断方法很简单收藏之前用手机打开看一眼如果首屏需要横向滚动直接放弃。第三个坑是过度依赖社区评价。评价体系一旦被商业化参考价值就会快速下降。我的替代方案是看负面评价的具体细节——说不好吃的没信息量说上菜等了 40 分钟、鱼是冻的不是鲜的才有信息量。学会从差评里提取具体事实比看好评有用得多。4. 学习类 27 个按输入、加工、输出三段排布4.1 通识与公开课五个入口重点看有没有配套材料通识类的站我留了五个。挑选时我不看课程数量看三样东西有没有字幕文件可下载、有没有课后习题、有没有讲义 PDF。这三样决定了一门课是看个热闹还是真的学进去。为什么字幕文件这么重要因为视频学习最大的问题是无法检索。你想回头找某个概念在哪讲到的只能拖着进度条瞎找。有了字幕文件直接全文搜索关键词几秒钟定位。更进一步字幕文件还能导出成文本配合笔记工具做成结构化摘要。这个用法我从几年前开始坚持现在积累了一百多门课的文字版摘要检索效率比看视频高一个数量级。课后习题的价值在于强制输出。看视频的时候人会产生一种虚假的掌握感觉得老师讲的都听懂了一做题才发现全是漏洞。所以我挑课的时候宁可课程讲得粗糙一点也要有习题。没有习题的课我会自己在笔记里给自己出三道题答不上来就说明这段白看了。4.2 文献与检索六个入口字段检索是分水岭这一类留了六个是学习类里最硬核的一块。判断一个检索入口好不好用只看一件事支不支持字段限定检索。也就是能不能指定标题里含某词作者是某人发表于某个年份区间。只支持一个搜索框的站检索精度差得离谱你搜一个常见词能出来几万条。好用的检索入口通常还有这几个特征支持相邻词检索两个词必须挨着出现、支持布尔逻辑组合、支持结果导出成标准引用格式、支持被引次数排序。最后这个特别有用一个新领域你完全不懂按被引次数排序看前二十篇很快就能摸清这个领域的骨架。文献管理这块我也留了一个位置专门放能把检索结果批量导出成参考文献格式的入口。手动一条条复制引用格式一篇论文十几条参考文献光这一项就能耗掉半小时。批量导出之后直接导入文献管理工具这个环节的效率提升是数量级的。注意导出引用格式之后一定要抽查两三条。不同来源的元数据质量参差不齐作者名拼错、年份错位、期刊名缩写不统一的情况很常见。直接拿去用最后排版的时候会哭。4.3 语言与写作四个入口语料库比词典更值钱语言类我只留了四个。词典类的东西现在到处都有不缺入口真正稀缺的是语料库——也就是大量真实文本的集合让你查一个词在真实语境里怎么用。举个例子这个搭配地不地道这种问题词典回答不了语料库能。你输入一个搭配它告诉你这个搭配在真实文本里出现了多少次通常和哪些词一起出现。这比任何用法说明都直观。我判断一个语料库好不好用看它是否支持按词性筛选和显示上下文窗口前者帮你排除干扰后者让你看清搭配环境。写作这块留了一个主要用来检查长文的一致性比如同一个术语前后有没有混用、数字格式是否统一、标点有没有中英混杂。这类检查人工做很痛苦工具做几秒钟。不过要提醒一句自动检查只能抓形式问题逻辑问题一点都帮不上别指望它替你改文章。4.4 编程与官方文档五个入口认准版本切换编程类留了五个核心原则只有一条优先官方文档第三方教程只作补充。这条原则是用血换来的早些年我照着博客教程配环境卡了整整两天最后发现教程针对的是两个大版本之前的工具链配置文件的位置和字段名全变了。官方文档好不好用看三个细节有没有版本切换器、有没有可运行的示例、有没有从旧版本迁移的说明。版本切换器是硬指标因为不同版本的行为差异可能极大你搜到的答案如果对不上版本越看越乱。可运行示例则是判断文档质量的试金石——只给代码片段不给完整上下文的文档你复制过去八成跑不起来。第三方教程我不是完全不用但用法变了只用来快速了解全貌不用来照着做。看完教程知道大概有哪些模块、彼此什么关系然后回官方文档逐个确认细节。这个顺序反过来的话你会被教程里的过时写法带偏。4.5 数学与可视化三个入口把抽象变成可拖动的图数学这块留了三个全是可视化类的。原因很简单很多数学概念卡住人的地方不是推导而是想象不出来。函数图像、几何变换、概率分布这些光看公式很难建立直觉但一旦能拖动参数看图形实时变化理解速度完全不一样。判断一个可视化工具好不好用看它能不能同时显示多个视图。比如一个函数左边显示图像右边显示对应的数值表你能看到每一个点的坐标怎么随参数变化。这种联动视图对建立直觉的帮助极大。另一个关键点是能不能导出图像写报告、做笔记的时候一张清晰的图比一段文字管用。我个人的用法是遇到一个新概念先用可视化工具玩十分钟把参数从最小拖到最大看图形怎么变然后再回去读定义和推导。这个顺序能大幅降低阅读时的挫败感因为你脑子里已经有画面了。4.6 题库与自测四个入口间隔重复才是关键自测这块留了四个。这里我要说一个很多人忽略的点光有题库没用关键是你怎么安排复习。人的遗忘曲线是先快后慢的同一道题今天做对了明天再做可能就忘了但隔一周再做反而记得更牢。所以题库的价值不在题多而在能不能按遗忘曲线安排复习。挑题库我看两点能不能标记掌握程度、能不能设置下次出现时间。能自动按你的标记安排复习节奏的效率是手动刷题的三倍以上。手动刷题的典型问题是会的题一直做不会的题一直躲因为做会的题有成就感。算法安排复习能强行把不会的题推到你面前。提示自测的正确率控制在一个区间最有效。全对说明太简单浪费时间全错说明太难挫败感强。保持在七成到八成正确率学习效率最高。这个区间是靠选题难度调出来的不是靠心情。5. 效率工具 18 个一天要用三次的那批5.1 文件与格式六个入口覆盖八成日常操作这一类留了六个基本覆盖了日常的文件处理需求图片压缩、格式互转、PDF 合并拆分、音视频转码、文档 OCR、大文件传输。先说图片压缩。挑这类站只看一件事图片是上传到服务器处理还是在浏览器本地处理。本地处理的意思是图片根本不上传全靠浏览器算力完成。这个区别看起来技术细节实际关系到隐私和速度——本地处理没有上传等待几十张大图批量处理也不会卡。判断方法很简单打开浏览器的开发者工具看网络面板压缩过程中有没有大流量的上传请求一目了然。PDF 这块我最常用的其实是合并和拆分而不是各种花哨的编辑功能。这两件事用到的频率极高报销要合并发票、交材料要拆出指定页、投稿要删掉封面。挑这类工具的标准是能不能拖拽排序能拖拽调整页序的效率比输入页码范围快太多。音视频转码这一块我给的建议是如果不是专业需求尽量用本地软件而不是在线站。原因很实在视频文件动辄几百兆上传下载的时间成本远超转码本身。在线转码真正合适的场景是手机上的临时需求比如把录音转成通用格式发给别人。注意涉及个人材料、证件、合同的文件一律不要走在线处理。这类文件哪怕站点承诺处理完自动删除你也没法验证。压缩图片、转格式这类操作本地软件几分钟就能装好一次性成本换长期安心。5.2 文本与数据五个入口处理看不见的字符这一类留了五个都是我每天都在用的正则表达式测试、JSON 格式化、时间戳转换、编码转换、文本差异对比。听起来都是程序员的东西实际上非技术岗位用到的频率也不低——处理表格数据、核对两版文档的差异、把一堆乱码重新编码这些事谁都会遇到。正则测试这个我最看重的是能不能实时高亮匹配结果。写正则最怕的就是我觉得写对了但不知道到底匹配到了什么。能实时高亮的工具你改一个字符就能看到匹配范围的变化调试效率差出十倍。更进一步的工具还会把捕获组单独列出来这个功能在处理复杂文本时特别省事。JSON 格式化这块标准是能不能折叠展开层级。一个几百行的 JSON 平铺开来找东西跟大海捞针一样能折叠的话先收起所有层级再一层层展开定位几秒钟就能找到目标字段。顺便提一句格式化之后记得检查一下有没有语法错误提示很多站只做美化不做校验格式乱掉的数据美化完还是错的。编码转换是这一类里最容易被低估的。你有没有遇到过打开一个文本文件全是问号或者奇怪的方块那大概率是编码没对上。一个能猜测编码并试转的工具能救回很多看起来已经毁掉的文件。文本框里粘一段乱码点几下不同的编码试转很多时候原文就回来了。5.3 设计与素材五个入口先说授权再谈好看这一类留了五个配色方案、图标库、字体、占位图、背景纹理。做 PPT、做海报、做个人项目的人都需要但这一类也是版权风险最高的一类。第一个要说的就是字体。中文字体的授权情况极其复杂很多字体标着免费实际只免费用于个人非商业场景一旦商用就是另一套价格。我挑字体站的标准是授权说明写在显眼位置、明确区分可商用与不可商用、提供授权文件下载。这三条不满足的再好看也不用。图标库的判断标准是风格一致性和格式齐全。一套图标如果线条粗细不统一、圆角大小不一放在一起会显得很业余。格式上至少要有矢量格式位图放大会糊。另外注意一点很多图标库是混合来源同一个库里不同图标可能来自不同作者、不同授权用之前要逐个确认不能看库的总体说明。配色这块好用的工具会给你整套方案而不是单个颜色。你选一个主色它自动给出配套的辅助色、强调色、背景色还告诉你这些颜色的对比度是否满足可读性要求。后者特别重要很多配色方案看着漂亮实际文字放上去根本看不清。5.4 工具类选择的第一原则能不能本地跑十八个工具位我最后的取舍标准只有一个这件事能不能在本地完成。能本地完成的优先本地只有本地做起来太麻烦的才交给在线站。这个标准的理由有三层。第一层是隐私你的文件不出本机就没有泄露风险。第二层是速度省掉上传下载的往返时间尤其是大文件。第三层是稳定性在线站会挂、会改版、会开始收费本地的软件装好了就在那儿除非你自己升级否则行为不变。按这个标准筛下来真正必须用在线站的其实不多需要实时协作的比如在线白板、需要共享链接的比如临时文件传输、需要浏览器算力但你懒得装环境的比如格式转换。剩下的那些装个本地小工具用起来更踏实。我现在的习惯是一个在线工具如果一周内用了超过三次就去找找有没有本地替代品。6. 剩下 6 个兜底位留给一定会变的东西6.1 兜底位的设计意图前面六十五个位置都是按类别固定分配的最后六个是机动位不绑定任何具体功能。这个设计来源于一个教训任何一份清单都会在半年内开始过期而过期的部分你往往不会主动去清理就那么烂在收藏夹里。兜底位的作用是给新需求留出空间。比如某段时间我要处理一批表格数据需要一个能批量做数据清洗的入口就占一个机动位项目结束后这个需求消失位置腾出来给下一个。这样清单始终是满编状态不会因为不断添加而膨胀。具体用法上我给自己定了一条规则机动位最多同时占用三个另外三个永远空着。空着不是浪费是为了让你在想加新东西的时候有一个明确的替换动作而不是新增。人一旦开始新增收藏夹就又开始膨胀了。6.2 每季度的清理动作清单要能长期用必须有固定的维护节奏。我定的是每季度一次每次不超过二十分钟动作就四个抽查十个随机入口看能不能正常打开、核心功能有没有变。看一眼有没有站点开始弹登录墙有的话降级到 A 档或者直接删。把机动位里超过两个月没用到的清掉。导出一次备份存成本地文件加时间戳。第三步是最容易被忽略的。机动位里的东西因为没有固定归属很容易一直占着不走。我给自己定的线是两个月超过两个月没用说明这个需求已经过去了删掉把位置让出来。7. 收藏夹要当索引不能当仓库7.1 三层目录加前缀命名收藏夹管理这块我用的是三层结构再深就没必要了因为深到第四层的时候你自己都懒得点进去。第一层是场景日常、工作、学习、临时。第二层按功能分比如学习下面分成阅读、练习、参考。第三层才是具体条目。这个结构的重点是第一层的临时所有不确定归属的都先扔进去每周清一次清不掉的自然就浮出来了。命名上我加了两类前缀。一类是动作前缀比如压-转-查-让你看一眼就知道这个入口是干什么的。另一类是状态前缀用符号标记常用待验证可能失效。这些前缀看起来土但搜索的时候极其管用你在地址栏敲两个字就能直接跳到目标。7.2 每条书签必须写一句备注这是我认为投入产出比最高的一条习惯收藏的时候必须写一句备注说明我为什么收藏它。这句话不用长十个字以内就行比如按食材反查历史成交价版本切换。为什么这么重要因为三个月后你看着一个站名完全想不起来当初为什么存它。有了备注你一眼就知道这个入口解决什么问题用不上的也可以直接删。我做过对比同样一批书签有备注的复用率是没备注的三倍以上。备注还有一个隐藏价值它会逼你在收藏的那一刻就想清楚这个站到底能解决什么。想不清楚的说明你只是被页面设计打动了这种情况存下来也是死链。我现在的规矩是写不出备注就不收藏这一条筛掉了大概四成的收藏冲动。7.3 死链巡检写个小脚本定期跑一遍书签多了之后手动点开检查是不现实的。我用一个很短的脚本定期跑一遍把打不开的挑出来。import json import time import urllib.request # 浏览器导出的书签 HTML 转成 JSON 后结构大致如下 # {roots: {bookmark_bar: {children: [{name: ..., url: ...}]}}} def walk(node, out): if isinstance(node, dict): url node.get(url) if url and url.startswith(http): out.append((node.get(name, ), url)) for child in node.get(children, []) or []: walk(child, out) elif isinstance(node, list): for item in node: walk(item, out) def check(url, timeout8): req urllib.request.Request( url, methodHEAD, headers{User-Agent: Mozilla/5.0 (bookmark-checker)}, ) try: with urllib.request.urlopen(req, timeouttimeout) as resp: return resp.status except Exception as exc: return str(exc)[:60] def main(path): with open(path, r, encodingutf-8) as f: data json.load(f) items [] walk(data.get(roots, data), items) bad [] for name, url in items: code check(url) if code ! 200: bad.append((name, url, code)) time.sleep(0.3) with open(bad_bookmarks.txt, w, encodingutf-8) as f: for name, url, code in bad: f.write(f{code}\t{name}\t{url}\n) print(f总计 {len(items)} 条异常 {len(bad)} 条) if __name__ __main__: main(bookmarks.json)几个实操要点。第一用 HEAD 而不是 GET只请求响应头不下载内容速度快十倍以上。第二加 0.3 秒间隔别把人家服务器打崩了四千条书签如果并发跑很容易被限流结果全是误报。第三注意区分真失效和拒绝访问。返回 403、405 很可能是站点的反爬策略而不是链接挂了这类需要人工复核。跑完之后得到的异常列表不要一键全删。先按错误码分组4xx 的抽查几条看看是不是反爬5xx 的等一天再试一次超时的换个网络环境试试。我第一跑的时候得到八百多条异常人工复核之后发现真正失效的只有三百多条一半以上是误报。7.4 浏览器之外的同步方式只存在浏览器里的书签有个致命问题换设备、换浏览器、重装系统都可能丢。我现在的做法是三重备份本地导出文件每季度导出一次文件名带日期存到同步盘。纯文本清单把清单整理成一个 Markdown 文件一行一条带一句备注。这个是给人看的也是最终的兜底。在线索引页自己维护一个简单的本地 HTML 索引页按分类排版用浏览器打开就能点。这个不用联网也能用。第二项最重要。纯文本不会因为任何软件的格式变更而失效哪怕二十年后你用一个记事本也能打开它。我现在所有重要的清单最终都会落成一份纯文本。8. 踩坑实录与速查表8.1 常见问题速查表现象最可能的原因处理方式打开后满屏弹窗找不到正文站点被广告联盟劫持直接弃用换同类替代功能正常但一直提示登录核心功能做了门槛试无痕模式仍要求登录则降级下载的安装包带其他软件捆绑安装删掉找开源替代处理一半卡住不动在线算力限制或文件过大大文件改本地软件处理结果无法复制或导出数据被锁定换支持导出的同类站手机打开排版错乱未做响应式适配放弃这类需求八成在手机端过了半年完全变样站点易主或转型从清单移除不看旧习惯书签能打开但内容没了域名被重新注册巡检时按内容而非状态码判断最后一行需要特别解释。死链巡检只看状态码是不够的有一种情况是域名还在、HTTP 200但内容已经完全换成别的东西了。这类僵尸站比死链更麻烦因为你的巡检脚本不会报错。我的处理办法是巡检时对每个站抓一下标题和当初记录的关键词做个比对对不上的标红人工复核。8.2 三条用时间换来的经验**第一条收藏的那一刻就是判断力最强的时刻。**如果你打开一个站想了十秒钟还没想明白我要用它干什么那就别收藏。等以后需要的时候再搜一样能搜到。收藏夹里九成的垃圾都是看起来不错先存着存进来的。**第二条功能越单一的站活得越久。**一个只做图片压缩的站维护成本低作者容易坚持一个什么都做的聚合站光是维护各个模块的接口就够呛两年内大概率烂掉。选工具的时候宁可选小而稳不选大而全。**第三条清单的价值在少不在全。**我最初整理的时候也想过搞个两三百个的超级清单后来发现超过一百个之后选择成本就超过了收益。你打开清单面对两百个选项光是决定用哪个就要花一分钟还不如直接搜。七十一这个数字是我试了几轮定下来的能记住、能背出个大概、能在三十秒内找到需要的那一个。说到底这份清单真正想解决的不是信息不够而是信息过载之后不敢下手。每次有人问我有没有什么好用的网站推荐我都会先反问一句你具体想解决什么问题。因为不带着问题去找工具最后收集到的只会是一堆看起来很厉害的链接和那个 6MB 的导出文件一样躺在硬盘里再也不会被打开。清单可以抄但筛选的那套标准得自己走一遍走完之后你会发现真正留下来的往往不到你最初想收藏的十分之一而这十分之一足够撑起你九成的日常需求。