python爬虫20 | 小帅b教你如何识别图片验证码
off999 2024-10-23 12:52 21 浏览 0 评论
当你在爬取某些网站的时候
对于你的一些频繁请求
对方会阻碍你
常见的方式就是使用验证码
验证码的主要功能
就是区分你是人还是鬼(机器人)
人
想法设法的搞一些手段来对付技术
而
技术又能对付人们的想法
一来一去
就有了各种各样的变态验证码
也有了各种各样的应对方式
常见的验证码有这么几种
图像验证
语音验证
短信验证
极验验证
点击验证
今天
小帅b想跟你先说说如何识别图像验证码
那么
接下来就是
学习 python 的正确姿势
我们来看看这些图片验证码
(此图来源网络)
可以发现
这些验证码大多是数字和字母组成
然后在此之上再添加一些像毛一样的线
或者搞一些噪点
或者把这些字符扭曲一下
为了增加识别难度也是辛苦人家了
接下来我们思考一下
我们要识别这类验证码要怎么做呢
首先要处理一下验证码图片
什么噪点乱七八糟的
我们尽量把它们去掉
让图片
尽量黑白
尽量只剩下字符本身
然后再用 python 强大的 OCR 工具
Python-tesseract
来识别我们优化好的图片
这样正确率就会大大的提高
哎呀
我真是个聪明 boy 啊
为了让你更清楚的知道怎么识别图像验证码
小帅b用 python 搞了几张识别难度不同的验证码
第一张
难度系数:
第二张
难度系数:
第三张
难度系数:
第四张
难度系数:
第五张
难度系数 :
先对第一张进行识别
这张看起来没什么 "污染"
所以相对简单
先安装一下 pytesseract
pip install pytesseract
接着安装一下 tesseract-ocr
如果你是 ubuntu 系统可以直接使用如下命令安装
sudo apt install tesseract-ocr
如果你是 win 系统自行 Google 一下安装 tesseract-ocr 以及环境变量配置
完了之后就导入相关模块到我们的代码文件中
try: from PIL import Imageexcept ImportError: import Imageimport pytesseract
接着我们就打开第一张图片
使用 pytesseract 识别
打印一下
captcha = Image.open("captcha1.png")result = pytesseract.image_to_string(captcha)print(result)
打印结果
ok,么有问题
接着我们来识别第 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 么?
如果你能
算你牛逼
反正小帅b不能
所以 pytesseract 也不能
对于一些简单的验证码
使用 pytesseract 还是可以的
如果你想提高 pytesseract 识别率
还可以去搞些图片去训练一下 tesseract-ocr
ok
以上
主要让你了解一下图片识别库的使用
以及对一些图片的常用降噪操作
那么下次你爬到一些需要图像的简单验证码
应该不在话下了
完
下回见
peace
点个赞啊~~(破音)
相关推荐
- python入门到脱坑经典案例—清空列表
-
在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...
- python中元组,列表,字典,集合删除项目方式的归纳
-
九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...
- Linux 下海量文件删除方法效率对比,最慢的竟然是 rm
-
Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...
- 数据结构与算法——链式存储(链表)的插入及删除,
-
持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...
- Python自动化:openpyxl写入数据,插入删除行列等基础操作
-
importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...
- 在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)
-
通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...
- Python 批量卸载关联包 pip-autoremove
-
pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...
- 用Python在Word文档中插入和删除文本框
-
在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...
- Python 从列表中删除值的多种实用方法详解
-
#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...
- Python 中的前缀删除操作全指南(python删除前导0)
-
1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...
- 每天学点Python知识:如何删除空白
-
在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...
- Linux系统自带Python2&yum的卸载及重装
-
写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...
- 如何使用Python将多个excel文件数据快速汇总?
-
在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...
- 【第三弹】用Python实现Excel的vlookup功能
-
今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...
- python中pandas读取excel单列及连续多列数据
-
案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python命令行参数 (53)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)