(值得收藏)Python爬虫过程中验证码识别的三种解决方案
off999 2024-10-22 13:31 24 浏览 0 评论
前言
在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫。验证码问题看似简单,想做到准确率很高,也是一件不容易的事情。为了更好学习爬虫,后续推文中将会更多介绍爬虫问题的解决方案。本篇推文将分享三种解决验证码的方法,如果你有比较好的方案,欢迎留言区讨论交流,共同进步。另外小编也给大家准备了一些爬虫的学习资料,免费分享,在最下面!
1.pytesseract
很多人学习python,不知道从何学起。很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。很多已经做案例的人,却不知道如何去学习更加高深的知识。那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!QQ群:1097524789
pytesseract是google做的ocr库,可以识别图片中的文字,一般用在爬虫登录时验证码的识别,在安装pytesseract环境过程中会遇到各种坑的事情,如果你需要安装,可以按照如下流程去做,避免踩坑。下面以 mac为例。
1.安装方法
pip install pytesseract
2.此外,还需安装Tesseract,它是一个开源的OCR引擎,能识别100多种语言。
brew install tesseract
3.查看安装位置为
brew list tesseract
/usr/local/Cellar/tesseract/4.1.1/bin/tesseract
/usr/local/Cellar/tesseract/4.1.1/include/tesseract/ (19 files)
/usr/local/Cellar/tesseract/4.1.1/lib/libtesseract.4.dylib
/usr/local/Cellar/tesseract/4.1.1/lib/pkgconfig/tesseract.pc
/usr/local/Cellar/tesseract/4.1.1/lib/ (2 other files)
/usr/local/Cellar/tesseract/4.1.1/share/tessdata/ (35 files)
4.配置环境变量
export TESSDATA_PREFIX=/usr/local/Cellar/tesseract/4.1.1/share/tessdata
export PATH=$PATH:$TESSDATA_PREFIX
5.如何出现如下报错
'TesseractNotFoundError: tesseract is not installed or it's not in your PATH'
6.修改pytesseract.py的cmd
'tesseract_cmd = '/usr/local/Cellar/tesseract/4.1.1/bin/tesseract''
先验证一个简单的验证码
代码如下
from PIL import Image,ImageFilter
import pytesseract
path ='/Users/****/***.jpg'
captcha = Image.open(path)
result = pytesseract.image_to_string(captcha)
print(result)
结果输出
51188
再换一张试一下
?
输入代码后,结果错误输出为
1364
由此看出,pytesseract对于简单方法有效,并不像有些人写的这么好,当然可以通过灰度、二值等方法,效果并不是很理想,稍微复杂的需要寻找其他解决方案,如果解决上述问题呢,我们看下面的解决方案。
2.百度OCR接口
调用百度OCR接口(代码示例)
# encoding:utf-8
import requests
import base64
'''
通用文字识别(高精度版)
'''
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
上述方案没解决的问题,调用此方法试一下,可以顺利解决。
7364
那么对于更复杂的验证码呢?
?
首先直接调用结果输出
Ygax6-
结果把干扰线识别出来Y和-,可以看出百度OCR接口对复杂验证码能识别,但是对干扰线的问题,无法解决。如何解决上述问题呢?对于复杂的验证码,我们是不能直接调用,我们先做一些预处理:灰度、二值化等。
?
再次调用接口
gax6
上述问题得到了解决。对于超级变态的验证码如何解决呢?几个0?几个O?下面提供一种深度学习解决方案。
?
3.深度学习
深度学习验证码识别可能并不适合所有人,原因很简单,首先不是每个人都有算法基础。其次小编亲自测试来一下,cpu资源的消耗也非常高,如果你有云端资源可以跑一下。深度学习的验证码识别,我这边介绍一下解决方案的思路,目前企业级的验证识别更为复杂。
1.搭建基于keras框架的深度学习模型
from keras.models import *
from keras.layers import *
input_tensor = Input((height, width, 3))
x = input_tensor
for i in range(4):
x = Convolution2D(32*2**i, 3, 3, activation='relu')(x)
x = Convolution2D(32*2**i, 3, 3, activation='relu')(x)
x = MaxPooling2D((2, 2))(x)
x = Flatten()(x)
x = Dropout(0.25)(x)
x = [Dense(n_class, activation='softmax', name='c%d'%(i+1))(x) for i in range(4)]
model = Model(input=input_tensor, output=x)
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
2.模型训练
model.fit_generator(gen(), samples_per_epoch=51200, nb_epoch=5,
nb_worker=2, pickle_safe=True,
validation_data=gen(), nb_val_samples=1280)
3.测试模型
X, y = next(gen(1))
y_pred = model.predict(X)
plt.title('real: %s\npred:%s'%(decode(y), decode(y_pred)))
plt.imshow(X[0], cmap='gray')
4.结果展示
结论
验证码识别问题正如推文开头所说,看似简单,实际上远比想象的要复杂的多。有些解决方案也可能是针对性解决方案。目前想做一个普适性的解决方案任重而道远。遇到困难不可怕,可以一起讨论交流,下面是爬虫的学习资料。希望能够帮到大家!
值得拥有的学习资料
汇总图
六大技术文档
Python爬虫视频(部分展示)
Python学习资料
文章结束喽,记得关注小编,转发,收藏奥。以上的学习资料小编就不一一展示了,第一张汇总图的资料都有,也是一部分,需要的小伙伴私信“学习”即可获得获取方式,免费获取!
相关推荐
- u盘怎么取消读写保护(优盘怎么去掉读写保护)
-
如果您的U盘启动了读写保护,那么就无法进行数据的读取和写入操作。以下是一些可能的解决方法:1.检查开关或按钮:一些U盘有物理开关或按钮,用于启用或禁用读写保护。您可以检查一下U盘上是否有这样的开关或...
-
- 打印机脱机无法打印怎么办(打印机脱机无法打印故障处理)
-
打印机脱机无法打印怎么办?在使用打印机的过程中,经常会遇到打印机无法打印的问题,如果你的打印机已经正常使用了一段时间,而是现在打印机无法打印了,那么很可能是你的打印机脱机了。我们该怎么办呢?首先我们拿到打印机,要把它的电源线,USB打印线与...
-
2025-11-12 03:51 off999
- 激活码怎么激活(激活码怎么激活steam)
-
首先,启动电脑,在键盘按下“Win+R”,然后“运行”程序。然后,在“运行”的对话框输入“regedit”,回车确定输入命令然后,在窗口的左侧菜单选择“HKEY_LOCAL_MACHINE\SOFTW...
- 电脑动不动就卡住不动怎么回事
-
可能出现卡死原因:1、病毒引起,使你的电脑检测通过的程序太多,CPU主频性能不能充分发挥出来。2、温度过高,散热不好,使CPU性能下降。3、内存条太小,内存缺陷。5、可能设置了开机后自动登陆太多,自动...
- 笔记本风扇声音大怎么办(笔记本风扇声音非常大)
-
1.清理笔记本风扇灰尘一般而言,新买来的风扇总是噪声较小,而使用一段时间后会明显变大。其实,灰尘是造成风扇噪音上升的重要原因之一,因为无孔不入的灰尘总能钻进不完全密闭的机箱。当CPU风扇高速旋转时,漩...
- 如何添加无线网络打印机(如何添加无线网络打印机连接)
-
要添加网络打印机,您可以按照以下步骤进行操作:1.确保网络设置:首先,请确保您的计算机和打印机都已连接到同一个局域网或无线网络中,并且网络连接正常。确保您已经知道网络打印...
- 戴尔电脑一键重装系统(戴尔怎么一键重装系统)
-
若您需要重装戴尔系统,可以按照以下步骤进行操作:首先备份重要数据,然后获取系统安装介质,可以是光盘或USB驱动器。接下来,进入BIOS设置,将启动顺序调整为从安装介质启动。重启电脑后,按照屏幕提示进行...
- 电脑ip地址配置异常怎么修复
-
如果您发现IP地址配置异常,可以按照以下步骤尝试解决:1.检查网络连接:首先检查计算机、路由器或交换机等设备的网线、电源和连接状态是否正常,并确保网络设备正确连接。2.确认IP地址:检查您的计算机...
- 怎么把win7电脑恢复出厂设置
-
1.首先我们打开电脑找到“计算机”点击打开。2.进入页面然后我们点击“Windows7(C:)”打开C盘。3.我们在C盘界面找到Windows7并点击打开。4.进入到Win7文件夹中找到并双击“Sys...
- ctrl c 和 ctrl v 怎么按(一键复制粘贴)
-
左手小指按Ctrl键,食指按C键或者V键具体在按Ctrl+C的时候,无名指放在Z键上,中指放在X键上,食指按C键如果你也用这种方式的话,可能和我一样,第一次按的时候不习惯手指这样去分工的感觉,但是你...
- 玩游戏cpu温度多少正常(玩游戏cpu温度多少正常 贴吧)
-
在游戏过程中,CPU温度的正常范围通常在40°C至80°C之间。然而,具体的正常温度取决于CPU型号、散热系统和环境条件等因素。一般来说,如果CPU温度超过80°C,就可能存在过热的风险,需要采取措施...
- idm下载器(如何卸载idm下载器)
-
截至2023年9月3日,IDM(InternetDownloadManager)是一款非常受欢迎的下载工具,但它并没有被禁用。IDM可以帮助用户更快速、稳定地下载文件,提供了多线程下载、断点续传等...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
