python爬虫20 | 小帅b教你如何使用python识别图片验证码

当你在爬取某些网站的时候

对于你的一些频繁请求

对方会阻碍你

常见的方式就是使用验证码

验证码的主要功能

就是区分你是人还是鬼(机器人)

想法设法的搞一些手段来对付技术

技术又能对付人们的想法

一来一去

就有了各种各样的变态验证码

也有了各种各样的应对方式

常见的验证码有这么几种

图像验证

语音验证

短信验证

极验验证

点击验证

今天

小帅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

点个在看啊~~(破音)

原文地址:https://www.cnblogs.com/fxxkpython/p/10832247.html

时间: 2024-10-25 14:34:19

python爬虫20 | 小帅b教你如何使用python识别图片验证码的相关文章

Python爬虫基础教程,手把手教你爬取拉勾网!

一.思路分析: 在之前写拉勾网的爬虫的时候,总是得到下面这个结果(真是头疼),当你看到下面这个结果的时候,也就意味着被反爬了,因为一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问: 对于拉勾网,我们要找到职位信息的ajax接口倒是不难(如下图),问题是怎么不得到上面的结果. 要想我们的爬虫不被检测出来,我们可以使用代理IP,而网上有很多提供免费代理的网站,比如西刺代理.快代理.89免费代理等等,我

python爬虫-20行代码爬取王者荣耀所有英雄图片,小白也轻轻松松

1.环境 python3.6 需要用到的库: re.os.requests 2.简介 王者荣耀可以算得上是比较受欢迎的手游之一了,应该有不少的人都入坑过农药,我们今天的目的就是要爬取王者荣耀的高清英雄壁纸,包括这些英雄的皮肤,不废话了,go! 3.分析 首先,我们打开王者荣耀的英雄资料 然后,日常F12打开浏览器的开发者工具 可以看到这里返回了一个json数据,里面包含了英雄的名字(cname),皮肤名字(skin_name),英雄id(ename)这个id后面的皮肤有用 具体某一个英雄的网址,

Python爬虫实战小项目

爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据 import requests from fake_useragent import UserAgent ua = UserAgent(use_cache_server=False,verify_ssl=False).random headers = { 'User-Agent':ua } url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkz

Python入门学习:一步步教你怎么用Python写贪吃蛇游戏

前几天,有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),再合适不过了. 这里通过一个Python入门学习的例子跟大家详细讲解一下! 先通过下面这个效果图来感受下吧! 1 环境 操作系统:Windows Python版本:3.7.3 2 需求分析 我们先来回顾下贪吃蛇中的游戏元素及游戏规则. 首先呢,需要有贪吃蛇.有食物:需要能控制贪吃蛇来上下移动获取食物:贪吃蛇在吃取食物后,自身长度增加,同时食物消

Python爬虫入门【4】:美空网未登录图片爬取

美空网未登录图片----简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可以了,或者带带我也行. 美空网未登录图片----爬虫分析 首先,我们已经爬取到了N多的用户个人主页,我通过链接拼接获取到了 http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html 在这个页面中,咱们要找几个核心的关键点,发

python 爬虫2 介绍一下怎么抓取cookies,python多线程

读取cookies 可以这样: filename='FileCookieJar.txt' ckjar = cookielib.MozillaCookieJar() #这里读取cookie ckjar.load(filename, ignore_discard=True, ignore_expires=True) for item in ckjar: print "name:" +item.name print "Value:"+item.value 访问页面后,co

python爬虫22 | 以后我再讲python「模拟登录」我就是狗

接下来就是 学习python的正确姿势 做爬虫 绕不开模拟登录 为此小帅b给大家支了几招 python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! 有些网站的登录很弱鸡 传个用户名和密码 来个 POST 请求就搞定了 但还是少数 大多网站还是需要验证码的 登录需要验证码 频繁请求需要验证码 为此小帅b教你如何自动识别 python爬虫20 | 小帅b教你如何识别图片验证码 python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别 当然了 市面上还有许多打码验证平

教你分分钟学会用python爬虫框架Scrapy爬取你想要的内容

教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 python爬虫学习课程,下载地址:https://pan.baidu.com/s/1v6ik6YKhmqrqTCICmuceug 课程代码原件:课程视频: 原文地址:http://blog.51cto.com/aino007/2123341

[Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)

这篇文章主要讲述了使用python+selenium爬取新浪微博的热点话题和评论信息.其中使用该爬虫的缺点是效率极低,傻瓜式的爬虫,不能并行执行等,但是它的优点是采用分析DOM树结构分析网页源码并进行信息爬取,同时它可以通过浏览器进行爬取中间过程的演示及验证码的输入.这篇文章对爬虫的详细过程就不再论述了,主要是提供可运行的代码和运行截图即可.希望文章对你有所帮助吧~ 参考文章 [python爬虫] Selenium爬取新浪微博内容及用户信息 [Python爬虫] Selenium爬取新浪微博客户