
周末花 10 美元,他建了一个只搜个人网站的搜索引擎
受够了被 SEO 垃圾淹没的搜索结果,作者用一台租来的 GPU 和一个本地小模型,两天半索引了 56 万个网站主页。整个项目成本约 10 美元:怎么爬、怎么让 AI 分类、怎么在睡醒前自动清理垃圾源。
原文来源:Alex Morley Finch — 一个周末、一台按小时计费的 GPU、一个本地小模型,建出索引 56 万个网站主页的个人搜索引擎,总成本约 10 美元。
周日凌晨两点,Alex Morley Finch 睡不着,又一次被搜索引擎惹毛了。他真正想搜的东西——个人作品集、独立杂志、奇怪的小艺术项目、单人开发的软件——全都淹没在铺天盖地的公司文档和 SEO 垃圾之下。于是他做了凌晨两点该做的事:打开终端,敲下一份计划。
"我想给自己做一个搜索引擎。互联网上大约有 4000 万个域名,每个域名存 1KB 元数据就是 40GB,完全可行。"
到周三中午,他的索引里有 560,183 个网站主页,队列空了,他决定收工。这篇文章就是那个周末的记录:做了什么、哪里崩了、花了多少钱,以及如果你想自己造一个,他会给你什么建议。
一句话结论:大约 10 美元、一晚租来的 GPU、几小时盯着它跑,你就能拥有一个几十万站点的个人搜索索引,磁盘占用不到 1GB。
不做什么,和做什么
Alex 的目标很明确:不是"索引整个互联网",而是"找到正在做东西的人"——艺术、代码、硬件、诗歌、小剧场,而不是 docs.company.com 的文档海。单用户、无账号。
架构上他先写清楚了自己不建什么,主要是防止 AI 辅助编程时把项目悄悄"简化"成更大的东西:不做 IP 扫描、不用 Redis、不存完整页面 HTML、不做重新爬取调度、不做多租户。"忽略"只是一个分类上的复选框,在搜索时才生效——电商网站照样被爬虫总结,他只是不用看它们。
整体设计是四个进程,三个跑在自己电脑上,一个租来的 GPU 永远不直接碰数据库:
-
抓取器只访问网站主页,抓到的页面文本直接存在该域名自己的数据库行上,模型读完之后立刻抹掉。这一点比听起来重要得多:真实规模下,4000 万行 × 几 KB 的原始文本会迅速堆积成灾难,而作者只需要模型读取的那几秒钟有文本可用。
-
一个本地小语言模型读每个主页,写出一行名称、两三句摘要、一个分类和几个标签。
-
一个带模糊匹配的小搜索界面,输半个词也能找到对的站。
-
按小时租的 GPU 跑模型总结,不碰数据库。
—— 广告 ——
第一次看到成果:"这是错的互联网"
第一个版本几小时就跑了:指向一批域名样本,看着它们被总结、被搜索,一切正常。然后周日下午,Alex 看了一眼实际收录的东西——超过 90% 是公司和文档站。种子列表有偏,爬虫对接下来追什么毫无主见。
修复方案不是屏蔽。屏蔽很诱人但方向错了:一个无聊的公司文档页也可能链向某个人的个人博客,他不想失去这条路径。他改成给队列加权:被分类为"portfolio(作品集)""zine(独立杂志)"或"software(软件)"的页面,把它们的外链优先级大幅提高;被分类为"corporate(企业)"或"docs(文档)"的页面则降低。一个纯文本文件 category-priority.txt 成了他后半周末的方向盘——调一个数字,等一小时看结果,再调。
当天下午他清空了两次数据库,因为质量差到只能推倒重来。两个 bug 很有代表性:
一个站点的摘要字段只写着"academic-profile",一个分类标签被模型塞进了错误的槽位。修复:把可疑的过短摘要视为失败,用更严格的提示词重试一次。
另一个站点是 GoDaddy 的域名停放页,几乎没有任何真实 HTML,模型却总结它是"为毛绒圈(furry community)服务的"——它只是从主机名里看到了"furry"这个词,就凭空编造了一整个粉丝网站。这次教训成了规则:可见文本优先于标题,标题优先于从域名猜测的任何东西;如果页面接近空白或明显是停放页,干脆别问模型,直接标记跳过。
规模带来的问题:Tumblr、论坛农场和"守门人"
傍晚爬虫又出了新问题:Tumblr 和 Neocities 博客的涌入量之大,眼看要占据整个索引。第一反应是屏蔽它们,但这也感觉不对——Neocities 恰恰是他要找的那种美学。真正的修复是加一个上限:主域名永远允许,但一旦某个根域名产生超过 100 个子域名,就不再入队新的。这一条规则一次删掉了超过 45,000 个排队页面。Tumblr 最终仍然贡献了 9,000 多个页面,因为上限只作用于子域名层面。
也是这晚,项目的真正目的清晰起来:与其说"索引一切",不如说"找到为社区做东西的人"。他用大约十个精心挑选的入口重新播种了爬虫:tilde 社区、小型独立博客平台、一两个 webring。最终索引几乎全部追溯到这十个种子站的外链,而不是种子列表本身。
周一早上是同一问题的变体:论坛农场和中国 B2B 供应商微站,借着"forum"分类的权重提升,滚进一个近无限循环的近相同页面黑洞。他把"forum"的权重大幅调低,并开始维护一份明确的屏蔽名单。
GPU 租用的调试地狱
Alex 自己的消费级显卡本地跑模型,大约每秒总结一个页面——做提示词实验够用,填索引根本指望不上。于是他租了一台云 GPU 跑同一个模型,真正的调试时间几乎全花在这里,而且全都与 AI 本身无关。
第一个租用方案用了一个包装库,坚持要为单张 GPU 也启动分布式计算框架,然后那个框架和宿主机抢 CPU 时间——"我花钱租 GPU,结果被自己没要求的 CPU 争抢卡了脖子。"扔掉包装库,直接跑开源的推理服务器,又遇到冷启动高并发崩溃,原因是第一批请求的内存尖峰,把并发从冷启动直接拉满导致。修复方法:逐步提升并发,而不是一上来就全速。
真正干活的那台机器是一台中端工作站 GPU,配了完整且独占的 CPU 核心。这个区别——独占的 CPU 切片 vs 名字好听但共享的——可能比 GPU 型号本身更重要。这台机器的稳定吞吐大约是每分钟 600 个摘要,租金每小时约 35 美分。折算下来,约 1 美元就能编目十万个站点。
守门员:让模型自己决定屏蔽谁
周一深夜,盯着还在跑的爬虫,Alex 问了自己一个问题:这个规模下没法手动盯防劣化螺旋,能不能让第二个小进程从任何产出异常多的域名里抽样 5 到 10 个已完成页面,让模型自己判断要不要屏蔽?
这成了"守门员"(steward),也是让索引从约 65,000 页长到 560,000 页而无需人工盯着的关键一步。它跑在本地同一张卡和 LM Studio 上,判断螺旋的工作从不和填充索引的租用 GPU 抢资源。整个运行期间它自主屏蔽了 177 个问题域名——几乎全是酒店和订票农场——同时正确放过了大学和合法的超大规模平台(它们只是恰好子域名很多)。
四天的观察是整个过程最好玩的部分。早期博客和个人站占索引一半以上(主要是 Tumblr 和 Neocities 涌入);到结束时占比降到约 12%。不是因为个人站变少了——他找到了更多的一切——而是爬虫成熟为更广泛的混合体:非营利组织、社区站、软件项目、杂志、博物馆、播客。非营利组织一个分类就有近 27,000 个真实机构,随手抽查全是食物银行、野生动物慈善机构、公民团体——一个开始时几乎没想过的分类,成了索引最强的部分之一。
收尾与代价
优先级分类跑空后,爬虫开始清理零优先级积压——那些一直排队但从未浮上来的东西,是未经策展的原始互联网横截面。于是如期而至:模型开始编目一波成人网站。
约 15% 的爬取结果最终是"空"——要么是纯 JavaScript 外壳,他的简单 HTML 解析器看不穿;要么是机器人检测墙。他故意没建渲染 JS 的兜底方案,因为那意味着在规模上跑完整浏览器,是另一个昂贵得多的项目。"一些我想要的审美完美的网站此刻就躺在那个空桶里,有点心痛,但对一个周末预算来说这是正确的取舍。"
如果自己试一次,爬取和租 GPU 是好玩的部分,悄悄变成一团乱麻的是分类和标签管理。他让模型自由发明分类和标签名,理由是让模型教会他分类体系,而不是他先猜一个——快速起步是对的,代价是最终有 671 个分类(很多只用过一次)和超过 12.1 万个标签(一半以上只用过一次),因为模型每次调用拼写略有差异。他写了一个手动合并工具来处理。
另一个真正的规模问题是提示词和爬取导向本身。上面所有修复没有一个是来自聪明的一次性提示词,而是来自周末多个时间点观察生产数据、然后微调权重——一个文件、几个数字,基于爬虫实际在做什么。这个循环——看真实输出、调一个杠杆、再看——比任何前期规划都有效。
周末可行吗?
"如果你想要一个只返回你真正想找的东西的搜索引擎——是的,我觉得一个周末完全可行,便宜到 GPU 账单根本不构成不尝试的理由。"他总结的有效做法:
- 抓取和总结分离:慢网络连接永远不会让昂贵的 GPU 空转。
- 给爬虫队列加权,而不是硬屏蔽你暂时不想要的分类。
- 限制子域名而不是封禁整个平台。
- 空白或停放页面直接跳过模型。
- 规模超过某个点后,建一个自动化的劣化检测器。
代码会以开源形式放出(项目叫 Marlin,取自《海底总动员》里那条跨洋寻子的鱼)。他暂时不打算托管自己的生产数据库,所以没法直接交出那 56 万个站点——但代码是开源的,你可以把爬虫指向任何你好奇的方向。
© 2026 四月
原文链接:https://www.aprilzz.com/indie/maker-search-engine-weekend
相关文章
独立开发者的省钱方案:月租不到 10 欧元的全欧盟技术栈
云服务器、邮件、分析、监控、支付、认证、CDN——独立开发者在验证想法阶段,能不能把整条基础设施的月成本压到 10 欧元以内?这篇指南给出了逐项对比和推荐。
周末花 10 美元,我造了个只搜独立创作者的 50 万域名搜索引擎
受够了搜索结果全是企业文档和 SEO 垃圾?一位开发者用周末时间、约 10 美元 GPU 租费和一个小型本地模型,给自己建了覆盖 56 万个域名的个人搜索引擎——并开源了全部代码。
Cursor 悄悄移除了用量页面的金额:独立开发者为什么应该在意
2026 年 7 月 31 日起,Cursor 的自助套餐用量页不再显示美元金额,改用 token 数,连 CSV 导出和 API 的成本字段都被清零。对按量计费的独立开发者来说,这意味着你正在失去对自己最大一笔工具开支的可见性