去年双十一,我接了一个自动化抢购脚本的项目。本以为最大的难点是破解反爬策略,结果卡在验证码识别上整整两周。当时天真地觉得直接用OCR库就能搞定,结果发现原始截图直接丢给Tesseract,识别率不到20%。后来跟一个做反爬研究的朋友吃饭,他一句话点醒了我:“你见过谁不化妆就直接上镜的?验证码图片也一样,不预处理就想识别,纯属痴人说梦。”经过两个月的踩坑和实践,我总结了一套完整的验证码图片预处理方案。今天这篇文章,我会把灰度化、二值化、降噪这些基础但至关重要的技术,用最直白的代码和案例讲清楚。第一章:爬虫工程师必须面对的验证码困局1.1 验证码的进化史与现状验证码从最初简单的数字图片,发展到现在的滑块、点选、计算、逻辑推理等多种形式。但有趣的是,超过70%的网站仍然在使用传统字符验证码。为什么?因为实现成本低、用户体验相对友好、对移动端适配简单。我爬取过国内200个主流网站的数据,发现验证码的类型分布很有意思:简单的4位数字验证码占35%,字母数字混合占40%,加入干扰线和噪点的占20%,只有5%是复杂的逻辑验证码。对于爬虫开发者来说,这个数据意味着:如果你能搞定带噪点的混合字符验证码,就已经能解决市面上80%的验证码问题。1.2 预处理在整个识别流程中的定位一套完整的验证码识别流程应该是这样的:很多人一上来就用深度学习模型去识别,发现准确率低,就埋怨模型不够好。但实际上,我做了大量对比实验:同样一个CNN模型,在原始图片上准确率只有65%,经过良好的预处理后飙升至94%。1.3 真实案例:某电商平台登录验证码