Hacker News 中文摘要

RSS订阅

2025年:24小时略多即可爬取十亿网页 -- Crawling a billion web pages in just over 24 hours, in 2025

文章摘要

文章介绍了2025年实现24小时内爬取10亿网页的技术方案,总花费462美元,分享了爬取过程中的瓶颈问题、实践经验与理论差异。

文章总结

标题:2025年:如何在24小时内爬取10亿网页

核心内容概述

项目背景
作者发现近年来缺乏关于大规模网络爬虫的实践分享(最近可参考的是2012年Michael Nielsen的文章),决定在2025年的技术环境下重新探索这一课题。硬件方面,CPU核心数、NVMe固态硬盘带宽和网络吞吐量大幅提升,但网页动态化程度和内容体积也显著增加。最终,作者以462美元成本在25.5小时内完成了10.05亿网页的爬取。

核心约束条件
1. 时间限制:24小时目标(实际耗时25.5小时)
2. 预算控制:参考2012年580美元的标准,最终花费462美元
3. 仅爬取HTML:不执行JavaScript以保持历史对比性,但验证了纯HTML爬取仍覆盖大量内容
4. 礼貌性原则:严格遵守robots.txt、设置含联系方式的User-Agent、维护排除域名列表、限制同一域名访问间隔(70秒)
5. 容错设计:支持中断恢复,允许少量数据丢失(因本质是抽样爬取)

系统架构设计
采用12节点集群,每个节点包含:
- Redis实例:管理爬取状态(域名队列、URL边界、已访问记录、布隆过滤器等)
- 异步抓取进程池:单核支持6000-7000并发,CPU成为瓶颈(SSL握手消耗25%算力)
- 解析进程池:使用selectolax替代lxml,解析速度提升至160页/秒/进程
- 存储方案:放弃S3(成本过高),选用AWS i7i.4xlarge实例本地存储(16vCPU/128GB内存/3.75TB存储)

关键发现
1. 解析成为瓶颈:现代网页体积激增(中位数138KB vs 2012年的51KB),通过切换解析库和截断内容优化
2. 网络环境变化:DNS不再受限(因仅爬取Top100万域名),但SSL普及导致CPU成为抓取瓶颈
3. 内存管理教训:热门域名(如Yahoo、维基百科)的URL边界曾导致节点崩溃,需手动干预

与理论设计的对比
相比教科书方案(如Evan King提出的5天爬取100亿页),作者实测表明:
- 6.75台同等规格机器可达成类似目标
- 网络利用率约32%(理论预估30%),验证了可行性但需进一步优化

未来方向
1. 动态渲染爬取的成本评估(当前未处理JS)
2. 分析已爬取页面的元数据特征(存活率、内容类型分布等)
3. 应对反爬机制(如Cloudflare新推出的按次付费爬取服务)

技术细节精要

  • 硬件选型:12台i7i.4xlarge集群,总成本较S3方案节省90%
  • 性能优化:异步I/O实现高并发,布隆过滤器加速去重
  • 数据截断:保留250KB内容(覆盖85%以上页面完整内容)
  • 错误处理:日志轮换疏漏和内存溢出问题导致运行时干预

行业启示

  • 成本效益:现代硬件使亿级爬取进入百美元时代
  • 技术债:SSL普及和网页膨胀带来新的性能挑战
  • 伦理边界:礼貌爬取实践与AI时代数据获取的冲突显现

(注:原文中的Reddit讨论链接、图片引用及部分技术参数已精简,保留核心论证逻辑。)

评论总结

总结评论内容:

  1. 关于技术选择:
  • 有评论认为AWS并非必要,小型主机服务更经济(评论1:"small hosting companies with specialized servers...under 100$")
  • 对存储性能的质疑,指出SSD与RAM仍有差距(评论5:"Optane is an order of magnitude slower than RAM")
  1. 反爬虫挑战:
  • IP封锁是主要障碍(评论3:"websites simply block...not google")
  • 需要复杂应对措施(评论6:"residential proxies, captcha solvers...stealth chrome binaries")
  1. 性能优化:
  • Redis性能被低估(评论7:"redis taps out below tens of thousands of ops")
  • 极致优化案例(评论8:"35k req/sec on a single node with Rust")
  1. 行业观察:
  • 网络规模认知(评论2:"how small Google makes the Internet")
  • 商业价值判断(评论4:"path to becoming a (m)(b)illionaire")
  1. 特殊问题:
  • 大页面处理引发惊讶(评论9:"WTF did I just read?")
  • 规模扩展的调度难题(评论10:"per-domain politeness queuing...genuine headache")