多线程采集的瓶颈从来不是带宽,是人心的耐心。客户今天说只要商品标题和价格,我吭哧吭哧把爬虫调度器写好了,用asyncio搞了五百个并发,代理池轮转得跟风火轮似的。明天他一个电话过来,说“Flovico啊,我们市场部觉得还得加上用户评价,最好能区分好评差评”。我捏着手机站在公司消防通道里,听见自己后槽牙摩擦的声音。
改呗。DOM解析规则重写,XPath全换,正则表达式加了十几行。为了抓京东的评论还得模拟登录,绕过那个烦人的滑块验证码。我让团队里的小孩去搞这个,他折腾了两天说解决了,结果半夜跑批的时候账号全被风控了。凌晨三点我接到报警短信,爬起来看日志,发现他居然用同一个IP在十分钟内发了三千次请求。年轻人对“频率限制”这四个字根本毫无敬畏。
这还不是最糟的。第三天客户拉了个微信群,里面突然多了个“数据产品经理”。这位爷开口就是:“我们要的不是静态数据,是动态监控。竞争对手价格每变动一次,就要实时推送到我们后台,最好还能做个价格曲线图。”我盯着屏幕上已经写了八千行的scrapy项目,突然觉得胃里一阵抽搐。实时?意味着我得把定时任务拆成常驻进程,意味着要维护WebSocket长连接,意味着错误处理复杂度指数级上升。而当初合同上签的是“一次性数据采集服务”,价格是按数据条数算的。
团队开始出现怨气。负责写解析器的小伙子昨天提交代码时,commit message写的是“第N次需求变更,毁灭吧”。我找他谈话,他说:“老大,这项目都延期三周了,我女朋友说我再加班她就搬回娘家住。”我张了张嘴,发现什么也说不出来。我能说什么?说“坚持一下客户是上帝”?我自己都不信。
最讽刺的是技术层面其实早就解决了。多线程调度我用celery+redis玩得滚瓜烂熟,反爬策略从User-Agent轮换到浏览器指纹模拟都储备好了,甚至为了应对验证码还接了个打码平台。但所有这些技术堆叠,在客户飘忽不定的“商业洞察”面前,脆得像张纸。他们永远不明白,加一个字段不是打字那么简单,那背后是数据清洗规则的重新设计,是存储结构的迁移,是API接口的版本迭代。
昨天开项目复盘会,客户那边的接口人搓着手说:“其实我们最近又在想,能不能加上库存预警功能?就是当库存低于某个阈值时……”我打断他,问这个需求最早什么时候要。他笑着说:“不急不急,你们先做着,我们也是边走边看。”那一刻我特别想摔了手里的MacBook Pro。边走边看?我们团队六个人这一个月全耗在这个“边走边看”的项目里,其他项目全搁置了,公司现金流已经开始吃紧。
深夜改完最后一版需求文档,我关掉电脑。显示器的黑屏映出我自己的脸,三十四岁,眼袋快垂到颧骨了。爬虫的线程可以开一千个一万个,但人的耐心只有一根线。那根线绷得太久,是会断的。而我现在听见的,就是它在我脑子里嗡嗡作响的声音。














