news 2026/4/17 22:24:53

【Python爬虫】验证码识别技术

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python爬虫】验证码识别技术

目录

  • 1 前言
  • 2 文字验证码识别 - 使用 ddddocr
    • 2.1 ddddocr 简介
    • 2.2 安装 ddddocr
    • 2.3 基本使用方法
    • 2.4 验证码预处理 - 使用颜色选择
  • 3 计算型验证码识别
    • 3.1 计算型验证码特点
    • 3.2 使用超级鹰 API 识别
      • 3.2.1 步骤 1:注册超级鹰账号
      • 3.2.2 步骤 2:实现超级鹰客户端,从官方下载即可
      • 3.2.3 步骤 3:使用超级鹰识别计算型验证码
    • 3.3 纯本地计算型验证码识别
      • 3.3.1 实现思路
      • 3.3.2 完整代码
  • 4 验证码识别的实践建议
  • 4.1 小建议
    • 4.2 常见问题及解决方案
  • 5 总结

1 前言

在网络爬虫开发过程中,验证码是一个常见的反爬机制。网站通过验证码来区分人类用户和机器爬虫,增加了自动化采集数据的难度。本文将详细介绍如何使用 Python 实现网站验证码的识别,包括文字验证码和计算型验证码的处理方法。

2 文字验证码识别 - 使用 ddddocr

2.1 ddddocr 简介

ddddocr 是一个基于深度学习的 OCR 识别库,专为验证码识别优化,具有以下特点:

  • 轻量级,安装简单
  • 识别准确率高
  • 支持多种验证码类型
  • 无需复杂配置

具体参考:ddddocr包链接

2.2 安装 ddddocr

pipinstallddddocr

2.3 基本使用方法

importddddocr# 初始化OCR识别器ocr=ddddocr.DdddOcr(show_ad=False)# 读取验证码图片withopen('captcha.png','rb')asf:image=f.read()# 识别验证码result=ocr.classification(image)print(f"识别结果:{result}")

2.4 验证码预处理 - 使用颜色选择

对于一些复杂的验证码,特别是彩色验证码,我们可以使用颜色选择的方法来提高识别率:

这里使用我的代码,使用color_filter_colors,官方文档里面的案例是错的。

importddddocrdefocr_color(color:str,image_path:str):""" 识别验证码图片中的指定颜色(红色或蓝色) :param color: 颜色名称,"red"或"blue" :return: 识别到的验证码字符串 """ocr=ddddocr.DdddOcr(show_ad=False)image=open(image_path,"rb").read()# 只保留指定颜色部分result=ocr.classification(image,color_filter_colors=[color])returnresult# 实际应用示例# 1. 首先获取验证码图片# 这里使用Playwright截图获取验证码img_loc=page.locator("#verifyImage")img_loc.screenshot(path="verify_code.png")# 2. 获取提示文字,判断需要识别的颜色tip_text=page.locator("#verifyTips").inner_text()if"蓝色"intip_text.strip():verifyCode=ocr_color("blue","verify_code.png")elif"红色"intip_text.strip():verifyCode=ocr_color("red","verify_code.png")else:# 其他类型验证码处理print("处理其他类型验证码")print(f"验证码识别结果:{verifyCode}")

这种方法的优势在于:

  1. 可以只关注验证码中的特定颜色,忽略背景干扰
  2. 对于彩色验证码的识别率更高
  3. 代码简洁,不需要复杂的图像处理步骤
  4. 结合 ddddocr 的颜色过滤功能,效果显著

3 计算型验证码识别

3.1 计算型验证码特点

计算型验证码通常是一个简单的数学计算题,如“2+3=?”、“15-7=?”等。识别这类验证码需要:

  1. 提取验证码中的文本
  2. 解析数学表达式
  3. 计算结果

3.2 使用超级鹰 API 识别

对于计算型验证码,我们可以使用第三方验证码识别服务。这里以超级鹰(Chaojiying)API 为例,它支持多种验证码类型。

3.2.1 步骤 1:注册超级鹰账号

  1. 访问超级鹰官网
  2. 注册账号并充值
  3. 添加软件 ID,获取用户名、密码和软件 ID

3.2.2 步骤 2:实现超级鹰客户端,从官方下载即可

importrequestsfromhashlibimportmd5classChaojiying_Client(object):def__init__(self,username,password,soft_id):self.username=username password=password.encode('utf8')self.password=md5(password).hexdigest()self.soft_id=soft_id self.base_params={'user':self.username,'pass2':self.password,'softid':self.soft_id,}self.headers={'Connection':'Keep-Alive','User-Agent':'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}defPostPic(self,im,codetype):""" im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """params={'codetype':codetype,}params.update(self.base_params)files={'userfile':('ccc.jpg',im)}r=requests.post('http://upload.chaojiying.net/Upload/Processing.php',data=params,files=files,headers=self.headers)returnr.json()defPostPic_base64(self,base64_str,codetype):""" im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """params={'codetype':codetype,'file_base64':base64_str}params.update(self.base_params)r=requests.post('http://upload.chaojiying.net/Upload/Processing.php',data=params,headers=self.headers)returnr.json()defReportError(self,im_id):""" im_id: 报错题目的图片ID """params={'id':im_id,}params.update(self.base_params)r=requests.post('http://upload.chaojiying.net/Upload/ReportError.php',data=params,headers=self.headers)returnr.json()

3.2.3 步骤 3:使用超级鹰识别计算型验证码

# 初始化超级鹰客户端chaojiying=Chaojiying_Client('用户名','密码','软件ID')# 读取验证码图片im=open('verify_code.png','rb').read()# 识别验证码(6001表示计算题类型)result=chaojiying.PostPic(im,6001)# 获取识别结果ifresult['err_no']==0:verify_code=result['pic_str']print(f"验证码识别结果:{verify_code}")else:print(f"识别失败:{result['err_str']}")

3.3 纯本地计算型验证码识别

3.3.1 实现思路

  1. ddddocr识别出验证码图片里的算式文本(例如:3+5=9-2=4×3=
  2. 清洗文本,去掉等号、空格
  3. 解析并计算结果
  4. 输出最终答案

3.3.2 完整代码

importddddocrimportredefcalc_captcha_recognize(image_path:str):""" 纯本地识别计算型验证码(支持 + - × ÷) :param image_path: 验证码图片路径 :return: 计算结果(数字) """# 1. 初始化OCRocr=ddddocr.DdddOcr(show_ad=False)# 2. 读取图片并识别withopen(image_path,"rb")asf:img_bytes=f.read()ocr_result=ocr.classification(img_bytes)print(f"识别到原始算式:{ocr_result}")# 3. 清洗文本:只保留 数字 + - * /# 把 × 替换成 *,把 ÷ 替换成 /expr=ocr_result.strip()expr=expr.replace("=","")# 去掉等号expr=expr.replace("×","*")expr=expr.replace("÷","/")expr=re.sub(r"[^0-9\+\-\*\/]","",expr)# 只保留数字和运算符print(f"清洗后算式:{expr}")# 4. 计算结果(安全计算,避免危险eval)try:# 简单计算验证码用eval足够安全calc_result=eval(expr)# 取整数(计算题一般都是整数)calc_result=int(calc_result)returncalc_resultexcept:return"识别/计算失败"# ====================== 使用示例 ======================if__name__=="__main__":# 传入你的计算型验证码图片answer=calc_captcha_recognize("calc_captcha.png")print(f"验证码最终答案:{answer}")

4 验证码识别的实践建议

4.1 小建议

  1. 使用代理 IP:避免因频繁请求被网站屏蔽
  2. 添加请求间隔:模拟人类操作,避免请求过于频繁
  3. 异常处理:添加完善的异常处理机制,应对识别失败的情况
  4. 使用重复验证:验证不一定每次都成功,要重复验证,结合异常处理

4.2 常见问题及解决方案

问题解决方案
识别率低增加图像预处理步骤,尝试不同的 OCR 引擎
验证码频繁变化动态调整识别策略,收集更多样本
被网站屏蔽使用代理 IP,降低请求频率
计算型验证码解析错误优化正则表达式,增加表达式解析的鲁棒性

5 总结

验证码识别是爬虫开发中的重要环节,通过使用ddddocr 进行文字识别第三方服务处理计算型验证码,我们可以有效地应对网站的反爬机制。在实际应用中,需要根据具体情况选择合适的识别策略,并不断优化提高识别准确率。

希望本文对大家有所帮助,祝大家在爬虫开发的道路上越走越远!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 22:23:19

RESP.app技术架构深度解析:现代Redis管理工具的设计哲学与实践

RESP.app技术架构深度解析:现代Redis管理工具的设计哲学与实践 【免费下载链接】RedisDesktopManager RedisInsight/RedisDesktopManager: RedisDesktopManager 是一个用于 Redis 数据库管理的桌面应用程序,可以用于连接和操作 Redis 数据库,…

作者头像 李华
网站建设 2026/4/17 22:20:44

终极Git图形界面客户端:告别命令行,拥抱可视化版本控制

终极Git图形界面客户端:告别命令行,拥抱可视化版本控制 【免费下载链接】sourcegit Windows/macOS/Linux GUI client for GIT users 项目地址: https://gitcode.com/gh_mirrors/so/sourcegit 还在为Git复杂的命令行操作而头疼吗?Sourc…

作者头像 李华
网站建设 2026/4/17 22:19:54

从物理方程到AI生成:手把手图解SDE如何统一DDPM、NCSN等扩散模型

从物理方程到AI生成:图解SDE如何统一扩散模型家族 在咖啡厅里,我经常看到算法工程师们对着扩散模型的数学推导皱眉——那些随机微分方程(SDE)符号像天书般令人望而生畏。但当我用物理实验室的弹簧振子演示噪声如何影响运动轨迹时&…

作者头像 李华
网站建设 2026/4/17 22:16:24

Anthropic新型AI模型引国家安全担忧,美国政府施压管控或加剧

美国新兴企业Anthropic发布新型AI模型“Claude Mythos”,因其可能影响国家安全,引发美国政府密切关注与介入,国家对AI开发的管控或进一步加剧。Mythos引发安全担忧4月7日Anthropic发布的Mythos,被认为一旦权重数据被敌对势力窃取&…

作者头像 李华
网站建设 2026/4/17 22:13:41

如何用NS-USBLoader一站式管理你的Switch游戏库

如何用NS-USBLoader一站式管理你的Switch游戏库 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.com/gh_mirrors/ns/ns-usbloade…

作者头像 李华