两周完成爬虫技术栈升级:Scrapy 迁移 Crawlo 的路径与取舍
问题定位:不是框架选型错,是执行模型不匹配我们的抓取服务在 Scrapy 上稳定运行了两年,日均调度量从 30 万涨到 3000 万。迁移的动因不是 Scrapy 不行,而是它的并发模型在当前负载下出现了结构性瓶颈。Scrapy 建立在 Twisted 之上,整套请求与回调跑在单个 reactor 线程里,靠协程让出 CPU 来实现并发。这要求每个回调必须是非阻塞的。一旦 parse 回调里出现 CPU 密集的同步代码,比如大文档的 XPath 批量抽取、深回溯正则、或者 JSON 反序列化后的字段规整,reactor 就会被这一个回调独占,事件循环无法推进,同进程内其他所有在途请求一起排队。