垃圾分类这事,上海一强制执行,我就知道流量来了。凌晨两点盯着微博热搜,脑子里就一个念头:得抢在所有人前面,搞个能查分类的小工具。
直接上爬虫。先抓了上海绿化市容局官网的官方分类名录,结果发现他们用的是动态加载,DOM 树里压根没数据。切到 Chrome 开发者工具看 XHR,抓到了几个 JSON 接口,但里面字段乱七八糟,“干垃圾”和“干垃圾(其他垃圾)”混着用,还得自己清洗。最恶心的是频率限制,同一个 IP 连续请求十几次就 403,我只好上了代理 IP 池,用 requests 库写了个随机 UA 和延迟,硬是把两千多个词条拖下来了。
光有名录不够,用户不可能背下来。得做识别。当时第一反应是图像识别,但训练模型太慢,等搞完热点早凉了。马上转向文本匹配,用 jieba 分词加余弦相似度,先对付着。但测试发现,“奶茶杯”这种复合词根本分不准,用户输入“喝剩的珍珠奶茶杯盖算什么垃圾”,直接抓瞎。逼急了,直接去搜有没有现成的 API,真找到一个某云平台刚出的垃圾分类接口,免费额度一天 5000 次,够用了。连夜申请密钥,把爬下来的名录作为本地缓存兜底,API 挂了或者超限了就回退到本地模糊匹配。
前后端加起来就一个 Python 脚本加个简陋的 Flask 接口。前端?没时间搞了,直接套了 Bootstrap 的现成模板,输入框加个按钮,结果用颜色区分四类垃圾。域名用的腾讯云学生机,一年几十块。从有想法到能访问,用了不到八个小时。
早上七点,工具上线。扔了几个程序员社群和上海本地论坛。到中午,UV 过了五千,API 调用量眼看要破免费额度。赶紧又加了层本地缓存,同样的查询半小时内不走 API。下午流量开始疯涨,服务器 CPU 飙到 90%,日志里一堆报错,都是并发太高数据库锁死。临时把 SQLite 换成了纯内存字典,虽然重启就丢数据,但先扛住再说。
这一天,眼睛没合过。看着实时访问曲线往上窜,心里那点虚荣感满足不了焦虑。这玩意儿技术壁垒为零,就是个信息整合加接口调用,我能做别人明天就能复制。流量来得快,去得更快。果然,三天后,微信里出了更完善的小程序,带语音识别和拍照功能,我的流量断崖式下跌。
独狼时期就是这样,靠手快、靠野路子抢一口热饭。技术栈?都是临时拼凑的。稳定性?先活了再说。心里清楚,这种快钱项目长不了,但当时就是停不下来,像饿急了的狼,闻到一点血腥味就扑上去,管它后面是不是陷阱。SEO 那套玩久了,对流量有种病态的嗅觉,也种下了深深的技能焦虑——你永远不知道下一个热点需要你临时学会什么。














