网络爬虫笔记—图形验证码识别
网络爬虫笔记—图形验证码识别
<兄弟们,本文章开启了关注后阅读。大家如不想关注,可直接微信搜索“宏蜘蛛”或文章标题,查看文章。>
1、什么是图形验证码
像知网注册界面的这种验证码,就是图形验证码。
2、如何识别图形验证码
图形验证码可以利用这几年比较流行的OCR技术进行识别。OCR技术是一种图片识别技术,它可以识别图片中的文字,并将其转化为文本格式。我们在使用时,并不是自编一个OCR识别代码,而是直接使用第三方OCR识别技术。python的OCR需要使用到tesserocr库,该库不是python自带库需要进行安装,针对tesserocr库安装,大家可参考这篇文章:https://blog.csdn.net/Elom_H4/article/details/123987637。下面将以知网注册页面的验证码识别为例,进行案例的介绍。
3、知网图形验证码获取
知网图形验证码是一个动态验证码,每点击一次都会重新生成一个验证码。于是通过requests方式访问验证码链接,将不会得到登录界面显示的验证码,而是又生成了一个新的验证码。针对动态验证码的获取问题,一般可使用Selenium库操纵浏览器,然后对屏幕进行截屏,以此来获取网页的动态验证码。这一部分的内容将在后面的文章中体现,本次主要学习图形验证码的识别方法。
4、验证码识别
我们事先从知网注册网站下载了一个验证码图片,其图如下:
4.1、读取图片,直接识别
import tesserocr#OCR识别库
from PIL import Image#用于读取图片
image = Image.open("yanzhengma.png")#读取图片
result = tesserocr.image_to_text(image)#识别图片文字内容
print(result)
#输出结果:ZPBY-
读取图片后,直接识别的结果和实际值存在偏差,这时可以将图片转为灰度图片、然后再进行二值化处理,这样可以减少线条的干扰,从而识别的更加准确。
4.2、灰度和二值化处理
灰度处理,就是将彩色图片转化为黑白图片。
from PIL import Image#用于读取图片
image = Image.open("yanzhengma.png")#读取图片
image = image.convert("L")#传入L参数,代表将图片转为灰度图片
image.show()
结果输出:
与原始验证码相比,灰度图片变成了黑白无彩图片。电脑保存彩色的图片一般是三通道图片,即我们平常所说的RGB值,每一个像素点的值在0到255之间。当我们将其灰度之后,图片就会变成一个单通道图片。该单通道每一个像素点都是0到255之间的一个数,如果是0则代表是黑色,如果是255则代表是白色。二值化处理就是设置一个阈值,让灰度后的每一个像素点都与这个阈值比较,如果小于阈值就变成0,如果大于阈值就变成255,将原来的灰度图片,变成了更加黑白分明的图片,从而有利于图片的识别。
from PIL import Image#用于读取图片
image = Image.open("yanzhengma.png")#读取图片
image = image.convert("L")#传入L参数,代表将图片转为灰度图片
width = image.size[0]#获取图片的宽度
height = image.size[1]#获取图片的高度
threshold = 150#设置阈值
for h in range(0,height):for w in range(0,width):if image.getpixel((w,h)) < threshold:#遍历每一个像素点,并与阈值比较image.putpixel((w,h),(0))#如果小于阈值,则像素点的值变成0(黑色)else:image.putpixel((w,h),(255))#如果大于阈值,则像素点的值变成255(白色)
image.show()#展示图片
结果输出:
4.3、文字识别
import tesserocr#OCR识别库
from PIL import Image#用于读取图片
image = Image.open("yanzhengma.png")#读取图片
image = image.convert("L")#传入L参数,代表将图片转为灰度图片
width = image.size[0]#获取图片的宽度
height = image.size[1]#获取图片的高度
threshold = 150#设置阈值
for h in range(0,height):for w in range(0,width):if image.getpixel((w,h)) < threshold:#遍历每一个像素点,并与阈值比较image.putpixel((w,h),(0))#如果小于阈值,则像素点的值变成0(黑色)else:image.putpixel((w,h),(255))#如果大于阈值,则像素点的值变成255(白色)
result = tesserocr.image_to_text(image)#识别图片文字内容
print(result)
#输出结果:ZPDY
灰度和二值化处理之后,后面直接调用OCR
识别库就可以了,可以看到经过二值化处理之后,识别结果更加的准确。下面将三个图片放在一起,以便大家比较处理前后的变化。如果二值化处理之后的图片不清晰,大家可以通过调整阈值的方式来使图片变得清晰,减少其他线条的干扰。
- 本篇笔记首先在微信公众号“宏蜘蛛”上发布,链接为:网络爬虫笔记—图形验证码识别
—End—
参考资料
1、《Python3网络爬虫开发实战》_崔庆才
2、tesserocr_做测试的喵酱的博客-CSDN博客_tesserocr
3、python3.9 安装 tesserocr 过程 || pip install tesserocr pillow 安装失败解决方案_R874的博客-CSDN博客
4、Python之中Image的使用[putpixel]_qq_38221114的博客-CSDN博客
网络爬虫笔记—图形验证码识别相关推荐
- 网络爬虫笔记—图形验证码获取
网络爬虫笔记-图形验证码获取 1.验证码获取思路 1)使用selenium库操作谷歌浏览器,打开目标网站: 2)对目标网站进行截图,并将图片保存到本地: 3)获取验证码元素节点在屏幕上的位置,即横纵坐 ...
- 网络爬虫笔记—滑动验证码识别
网络爬虫笔记-滑动验证码识别 一.什么是滑动验证码 点击之前 点击之后 像这种通过滑动图片,补全缺口的方式,就是滑动验证码. 二.识别思路 1)使用selenium库操作谷歌浏览器,打开目标网站:关于 ...
- 网络爬虫中的验证码识别
网络爬虫遇到的验证码 在写网络,爬虫时,遇到很多网站存在验证码的情形,有其是比较烦的是,爬取数据的每一页都有验证码,如果只有登陆时,存在验证码,这个很好解决,只需将验证码获取后手动输入就行. 但对于每 ...
- [Python爬虫] 5-爬虫进阶(多线程爬虫/动态网页抓取/图形验证码识别)
# I.多线程爬虫 # 1)概念:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率 # 线程:火车的车厢,进程:火车头 # # 2)threading模块:专门提供用来做多线程编程的 ...
- Python 网络爬虫笔记11 -- Scrapy 实战
Python 网络爬虫笔记11 – Scrapy 实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- Python 网络爬虫笔记10 -- Scrapy 使用入门
Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...
- Python 网络爬虫笔记9 -- Scrapy爬虫框架
Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- Python 网络爬虫笔记8 -- 股票数据定向爬虫
Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...
- Python 网络爬虫笔记6 -- 正则表达式
Python 网络爬虫笔记6 – 正则表达式 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Python网 ...
最新文章
- 2019年ACM团队预备赛(题解)
- 为GridView添加表头thead
- Master Data Service调用API创建Model
- python图片二进制流转换成图片_python将图片二进制数据转换成Django file对象
- [js] 纯函数和函数式编程有什么关系?
- 网络安全防护部署,升级支持IPv6
- HTML照片墙 个性相册源码
- laravel框架常用目录路径
- Myeclipse 2020.5 版本首发!支持 Java14
- 关于使用VS.Net2003调试器出现的问题及相关解决方法[转]
- 【 Codeforces Round #551 (Div. 2) D】Serval and Rooted Tree【树形DP】
- Matlab 2018a的安装步骤
- sql server2008密钥
- 低级鼠标钩子WH MOUSE LL
- HTML中怎么适应所有浏览器,css如何自适应浏览器高度?
- jQuery视频弹窗插件可播放mp4,mov等格式
- 新员工入职表_招人难,留人难!超市如何留住新员工
- dnw for linux
- 小程序使用腾讯地图获取当前位置和地图选取位置
- 毕业设计-基于微信小程序的实验室服务系统