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
- 电脑如何打开隐藏文件(电脑怎么打开隐藏文件夹)
-
要显示隐藏文件,首先需要打开文件资源管理器,然后点击菜单栏中的“查看”选项,选中“隐藏项目”复选框即可。此时,隐藏文件和文件夹将会显示在文件资源管理器中,可以进行正常操作。如果需要隐藏文件和文件夹,可...
- 华硕官网客服电话(华硕官网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、还有一种方...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,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)
