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

对于你的一些频繁请求

对方会阻碍你

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

验证码的主要功能

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

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

技术又能对付人们的想法

一来一去

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

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

常见的验证码有这么几种

图像验证

语音验证

短信验证

极验验证

点击验证

今天

小帅b想跟你先说说如何识别图像验证码

那么

接下来就是

我们来看看这些图片验证码

(此图来源网络)

可以发现

这些验证码大多是数字和字母组成

然后在此之上再添加一些像毛一样的线

或者搞一些噪点

或者把这些字符扭曲一下

为了增加识别难度也是辛苦人家了

接下来我们思考一下

我们要识别这类验证码要怎么做呢

首先要处理一下验证码图片

什么噪点乱七八糟的

我们尽量把它们去掉

让图片

尽量黑白

尽量只剩下字符本身

然后再用 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] = 255else:pixels[x, y] = 0return img

调用一下

convert_img(captcha,150)

这时候图片就变成这样了

是不是一下子就清晰很多了呢

这时候我们对这张图片识别一下

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

成功识别

接下来我们再来看看有毛有噪的图片

这时候直接去识别是识别不出来的

所以还是老办法

先处理灰度

再 二值化

这次我们再降一下噪

data = img.getdata()w,h = img.sizecount = 0for 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 += 1if left_pixel == 0:count += 1if down_pixel == 0:count += 1if right_pixel == 0:count += 1if count > 4:img.putpixel((x, y), 0)

图片变成这样了

再识别一下

不过

pytesseract 不是万能的

对于稍微复杂一点的就识别不出来了

至于这张

你能看出它是 1l1l0oO0 么?

如果你能

算你牛逼

反正小帅b不能

所以 pytesseract 也不能

对于一些简单的验证码

使用 pytesseract 还是可以的

如果你想提高 pytesseract 识别率

还可以去搞些图片去训练一下 tesseract-ocr

ok

以上

主要让你了解一下图片识别库的使用

以及对一些图片的常用降噪操作

那么下次你爬到一些需要图像的简单验证码

应该不在话下了

下回见

听说你要 约 我啊!?

peace

点个在看啊~~(破音)

python怎么识别图片验证码_python爬虫20 | 小帅b教你如何使用python识别图片验证码...相关推荐

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

    当你在爬取某些网站的时候 对于你的一些频繁请求 对方会阻碍你 常见的方式就是使用验证码 验证码的主要功能 就是区分你是人还是鬼(机器人) 人 想法设法的搞一些手段来对付技术 而 技术又能对付人们的想法 ...

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

    当你在爬取某些网站的时候 对于你的一些频繁请求 对方会阻碍你 常见的方式就是使用验证码 验证码的主要功能 就是区分你是人还是鬼(机器人) 人 想法设法的搞一些手段来对付技术 而 技术又能对付人们的想法 ...

  3. python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...

    之前写的都是针对爬虫过程中遇到问题的解决方案,没怎么涉及到实际案例.这次,就以博客园为主题,写一个自动私信博客下的评论人员(在本篇留下的评论的同学也会被自动私信,如果不想被私信,同时又有问题,请私信我 ...

  4. 用python刷网页浏览量_python爬虫刷博客访问量教程一:直接请求

    import requests import time import random # 随机获取浏览器标识 def get_UA(): UA_list = [ "Mozilla/5.0 (L ...

  5. python 网站发送验证码_Python爬虫模拟登录带验证码网站

    爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 首先得明白cookie的作用, ...

  6. python爬虫爬取百度图片总结_python爬虫如何批量爬取百度图片

    当我们想要获取百度图片的时候,面对一张张图片,一次次的点击右键下载十分麻烦.python爬虫可以实现批量下载,根据我们下载网站位置.图片位置.图片下载数量.图片下载位置等需求进行批量下载,本文演示py ...

  7. python爬图代码实例_Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  8. python爬虫滑动验证码_python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别...

    今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 打开 ...

  9. python爬虫百度图片搜索_python 爬虫百度图片之列表图

    一.爬虫准备 语言:python 浏览器:google chrome 工具:request模块 首先我们在百度图片搜索页面输入需要搜索的关键词(比如:明星)页面结果如下 image.png 按F12进 ...

最新文章

  1. Qt编程之QTreeWidget使用方法
  2. 轨迹匹配地图 python_基于地图的视觉定位(一)
  3. exchange2010使用通配符造成的不停的需要输入密码却访问不了
  4. MySQL社区介绍_mysql社区服务器
  5. spartan6不能直接把时钟连到IO上
  6. c语言常考的程序,C语言 一些常考得东西
  7. 计算机网络画出发送窗口变化,全国2010年7月自考计算机网络原理试题及答案
  8. ios 设备获取idfa_iOS获取设备ID总结
  9. LVCOLUMN和LVITEM结构体解析
  10. 安装fail2ban
  11. 05 基本数据类型+五大数据类型
  12. 运筹OR帷幄,运筹优化的剖析与应用
  13. 最好的git命令行基础使用教程 windows
  14. dell台式计算机主板电池,怎么更换主板电池 主板电池更换方法【步骤详解】
  15. 数据库实验八 触发器实验
  16. 计算机系统备份教案,系统备份教案推荐.doc
  17. Linux Deploy 2.0 中文,Linux Deploy:在Android上部署Linux
  18. 制造主数据集成开发心得
  19. 优锘科技:渲染引擎T3D:WebGL端数字孪生应用最优解
  20. java让字体闪动_java 字体闪烁

热门文章

  1. [UWP]使用Writeable?Bitmap创建HSV色轮
  2. 【设备管理系统】如何助力制造企业实现精益生产?
  3. calico官网网络拓扑实现:基于eNSP与VMVare
  4. java 限制发送频率_java发送短信系列之限制日发送次数
  5. K-近邻算法(约会问题)
  6. 【Python】2.3绘制等边三角形
  7. 不定期更新,记录一些小知识
  8. 企业股权融资应关注的十个要点(下篇)
  9. excel 获取中文首字母缩写
  10. CSPS模拟 45 乔迁之喜