百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python网络爬虫之如何用代码识别图片验证码

off999 2024-10-23 12:52 31 浏览 0 评论

验证码

当我们在爬取某些网站的时候,对于一些频繁请求,网站会识别你是机器还是人。如果是机器,直接不允许你访问这个网站了,直接返回404或者禁止访问。


最常见的方式就是验证码。验证码的主要功能就是区分当前访问网站的是人还是代码。越难识别或者越模糊的验证码区分能力却强。网站想方设法的搞一些手段来对付技术,就是想让服务器不用承受代码大量访问的压力,这样就能够为正常用户提供流畅的服务了。


但是,技术又能对付人们的想法。一来一去,就有了各种各样的变态验证码,也有了各种各样的应对方式。


常见的验证码有这么几种:

  • 图像验证
  • 语音验证
  • 短信验证
  • 极验验证
  • 点击验证

如何识别图像验证码

来看看这些图片验证码:

这些验证码大多是数字和字母组成,然后在此之上再添加一些模糊的噪点或者横线竖线,或者把这些字符扭曲一下,增加识别难度。


接下来我们思考一下,我们要识别这类验证码要怎么做呢?

首先要处理一下验证码图片,什么乱七八糟的噪点都尽量把它们去掉,让图片尽量黑白,尽量只剩下字符本身,然后再用 python 强大的 OCR 工具:

Python-tesseract

来识别我们优化好的图片,这样正确率就会大大的提高。


我们用 python 搞几张识别难度不同的验证码:

第一张

难度系数: ★,一颗星

第二张

难度系数: ★★,两颗星

第三张

难度系数: ★★★,三颗星

第四张

难度系数: ★★★★,四颗星

第五张

难度系数 : ★★★★★,五颗星


先对第一张进行识别。第一张看起来比较清晰,识别起来没有难度。


先安装一下 pytesseract :

pip install pytesseract

接着安装一下 tesseract-ocr:

如果是 ubuntu 系统可以直接使用如下命令安装:

sudo apt install tesseract-ocr

如果是 win 系统自行百度一下安装 tesseract-ocr 以及环境变量配置。


完了之后就导入相关模块到代码文件中:

try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

接着打开第一张图片,使用 pytesseract 识别,打印出结果:

captcha = Image.open("captcha1.png")
result = pytesseract.image_to_string(captcha)
print(result)

结果:

识别成功!


接着来识别第 2 张:

captcha = Image.open("claptcha2.png")
result = pytesseract.image_to_string(captcha)
print(result)

结果是


1924,结果有误!pytesseract 准确率没那么高,没办法识别太多噪点的图片。如果这个图片再加上一点彩色背景如下图:

对 pytesseract 来说更有难度。

所以我们先对这张图片灰度处理一下:

captcha = Image.open("captcha2.png")
result = captcha.convert('L')
result.show()

图片就变成灰了:


虽然灰了,但是还不够。除了处理灰度还需要对其进行“二值化”:

def convert_img(img,threshold):
    img = img.convert("L")  # 处理灰度
    pixels = img.load()
    for x in range(img.width):
        for y in range(img.height):
            if pixels[x, y] > threshold:
                pixels[x, y] = 255
            else:
                pixels[x, y] = 0
    return img

调用一下:

convert_img(captcha,150)

图片就变成了:


非常清晰!

这时候对这张图片识别一下:

# 识别一下
result = pytesseract.image_to_string(result)
print(result)

成功识别!


接下来再来看看有毛有噪的图片:

这时候直接去识别是识别不出来的。所以还是老办法,先处理灰度,再进行“二值化”。这次再降一下噪:

data = img.getdata()
    w,h = img.size
    count = 0
    for x in range(1,h-1):
        for y in range(1, h - 1):
            # 找出各个像素方向
            mid_pixel = data[w * y + x]
            if mid_pixel == 0:
                top_pixel = data[w * (y - 1) + x]
                left_pixel = data[w * y + (x - 1)]
                down_pixel = data[w * (y + 1) + x]
                right_pixel = data[w * y + (x + 1)]

                if top_pixel == 0:
                    count += 1
                if left_pixel == 0:
                    count += 1
                if down_pixel == 0:
                    count += 1
                if right_pixel == 0:
                    count += 1
                if count > 4:
                    img.putpixel((x, y), 0)

图片变成这样了:


再识别一下:


不过,pytesseract 不是万能的,对于稍微复杂一点的就识别不出来了。至于这张:

我们肉眼都很难看出它是 1l1l0oO0,更不要说用代码去识别了,所以 pytesseract 也识别不了。


对于一些简单的验证码,使用 pytesseract 还是可以的。如果我们想提高 pytesseract 识别率,还可以去搞些图片去训练一下 tesseract-ocr。这样,当我们遇到一些登录需要验证码的网站时,直接引入本文识别验证码的方法就可以继续爬数据了。

相关推荐

智慧工厂管理系统(智慧工厂管理系统哪家好)
智慧工厂管理系统(智慧工厂管理系统哪家好)

智慧工厂智能化系统整体的解决方案分为三个主要部分,分别是现场控制系统(FDC)、生产数据管理系统(PDM)以及工厂数字化协同平台(LCT)。其中,现场控制系统(FDC)是智慧工厂系统非常重要的核心组成部分,它是一个支持大规模互联的集群控制系...

2025-11-13 22:03 off999

笔记本无法连接此网络(笔记本无法连接网络wifi)
  • 笔记本无法连接此网络(笔记本无法连接网络wifi)
  • 笔记本无法连接此网络(笔记本无法连接网络wifi)
  • 笔记本无法连接此网络(笔记本无法连接网络wifi)
  • 笔记本无法连接此网络(笔记本无法连接网络wifi)
电脑如何打开隐藏文件(电脑怎么打开隐藏文件夹)

要显示隐藏文件,首先需要打开文件资源管理器,然后点击菜单栏中的“查看”选项,选中“隐藏项目”复选框即可。此时,隐藏文件和文件夹将会显示在文件资源管理器中,可以进行正常操作。如果需要隐藏文件和文件夹,可...

华硕官网客服电话(华硕官网400客服电话)

华硕维修中心官网,http://www.asus.com.cn/support/你可以通过电话,邮件等方式联系华硕的售后客户,提供你的主板序列号,他会告诉你的。华硕ROG真享服务包是一项专门针对购买华...

win11如何进入安全模式(win11如何进入安全模式启动)

进入Win11安全模式有多种方法,下面介绍两种常用的方法:方法一:使用系统配置工具1.使用组合键Win+R打开“运行”对话框,输入“msconfig”并按Enter键。2.在“系统配...

网易邮箱163登录界面(网易163邮箱登陆界面)

163邮箱登录首页入口为http://mail.163.com/网易163免费邮箱--中文邮箱第一品牌.容量自动翻倍,支持50兆附件,免费开通手机号码邮箱赠送3G超大附件服务.支持各种客户端软件收发,...

win10激活注意事项(win10激活过程要多久)

1.是:KMS激活、数字许可证激活、产品密钥激活。2.KMS激活是通过KeyManagementService服务器来激活系统,它需要连接到企业内部的KMS服务器进行激活,适用于企业用户。数字...

华硕官网正品查询(华硕官网防伪查询)

登陆网站www.asus.com.cn进入网站,点击防伪查询,输入16位防伪数码,即可辨别真伪。华硕显卡sn码官网查1.打开浏览器进入华硕官方网站。2.在页面下方找到“华硕产品服务政策”类目,点击进入...

数据网络打开了连不上网怎么回事

1、如您无法上网请尝试关机开机重启;请检查是否已达本月流量封顶阀值;请检查手机设置移动数据是否已打开;手机设置流动数据选项APN及名称是否设置为3gnet。2、如仍无法上网,建议您可通过以下方式进行排...

synopsys软件(synthia软件)

PSIM是趋向于电力电子领域以及电机控制领域的仿真应用包软件。PSIM具有仿真高速、用户界面友好、波形解析等功能,为电力电子电路的解析、控制系统设计、电机驱动研究等有效提供强有力的仿真环境。本...

cmd定时关机命令设置时间(cmd定时关机怎么设置)

在WindowsXP下打开C盘,在Windows下选system32中有一个shutdown的程序,可以复制到其它系统中。“开始”--->运行--->(在输入shutdown的命令)...

笔记本电脑开机就蓝屏(笔记本电脑开机就蓝屏了)

USB:  假如计算机处于开机的状态时USB接口上有U盘等存储设备,那么计算机就很有可能出现蓝屏现象,而且无法正常开机。因此,当计算机在开机时出现蓝屏状态时,我们首先要检查一下USB接口是否有接入U...

重置无线路由器(重置无线路由器密码)

1、将网线—路由器—电脑之间的线路连接好,启动电脑和路由器设备;2、启动设备后,打开浏览器,在地址栏中输入192.168.1.1进入无线路由器设置界面。(如进不了请翻看路由器底部铭牌或者是路由器使用说...

电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
  • 电脑有网却打不开网页是怎么回事
win7系统整个界面变大(win7系统整个界面变大怎么办)

解决方法:1、首先查看当前系统的桌面图标情况,发现桌面图标突然变成了超大号的了。非常难看。2、右键点击桌面空白处,分别选择“查看”,“中等图标”。3、现在再查看桌面图标,发现已经恢复了。4、还有一种方...

取消回复欢迎 发表评论: