Python3爬虫中识别图形验证码的实例讲解_python

来源:脚本之家  责任编辑:小易  

有可能是文件损坏,手动下载同连接的音乐播放看看是否正常www.zgxue.com防采集请勿采集本网。

本节我们首先来尝试识别最简单的一种验证码,图形验证码,这种验证码出现的最早,现在也很常见,一般是四位字母或者数字组成的,例如中国知网的注册页面就有类似的验证码,链接为:http://my.cnki.net/elibregister/commonRegister.aspx,页面:

\xa0 是不间断空白符 我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内。 而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表

a0127ab16c0f31d7781e3cadafa4ab8.png

表单的最后一项就是图形验证码,我们必须完全输入正确图中的字符才可以完成注册。

data = urllib.parse.urlencode(values).encode(encoding='UTF8') 试下。

1.本节目标

空格、换行符、缩进符什么的干扰了,在得到的文本后面加个去除strip()就好了:1string.strip()

本节我们就以知网的验证码为例,讲解一下利用 OCR 技术识别此种图形验证码的方法。

展开全部 启动WinRAR,再定位到RAR压缩包文件夹下,选中RAR压缩包,再选择“工具”→“压缩文件转换为自解压格式”或者按下Alt+X键,单击“确定”按钮即可生成自解压

2. 准备工作

python setup.py install ======================================= 网络爬虫实例 1 __author__ = 'zdz8207' 2 from bs4 import BeautifulSoup 3 4 import urll

识别图形验证码需要的库有 Tesserocr,如果没有安装可以参考第一章的安装说明。

看书是基础,除此之外还有学习路线,该怎么学习,跟着路线来学的话,更加有效果。 第一阶段—Python基础准备:本阶段主要是学习Python零基础入门学习视频教程,html+css、java

3. 获取验证码

1、调用test函数超时监控,使用sleep模拟函数执行超时 2、引入signal模块,设置handler捕获超时信息,返回断言错误 3、alarm(3),设置3秒闹钟,函数调用超时3秒则直接返回 4、

为了便于实验,我们先将验证码的图片保存到本地,以供测试。

py3的到来势在必行,各个框架都已经支持放心使用,scrapy,spider等就很好了

打开开发者工具,找到验证码元素,可以看到这是一张图片,它的 src 属性是 CheckCode.aspx,在这里我们直接将这个链接打开:http://my.cnki.net/elibregister/CheckCode.aspx,就可以看到一个验证码,直接右键保存下来即可,将名称命名为 code.jpg,如图 8-2 所示:

通过爬网易新闻,讲述怎么获得文本 response = response = bs(requests.get('/17/BRPSKEFP0001121M.html').textclear = re.compile('<\\s*script[^>]*>[^&

ab639aae49160a15847b83a5779b691.png

这样我们就可以得到一张验证码图片供下面测试识别使用了。

json可以简单理解为类似于文本的一种文件格式,能够方便数据交换。 python中的Ajax和json实际上并没有什么关系,可以简单理解为用python爬虫在Ajax的网页中获取数据,然后

4. 识别测试

读取网址获取源码根据源码中的信息 分析源码,查找标签。

接下来我们新建一个项目,将验证码图片放到项目根目录下,用 Tesserocr 库来识别一下该验证码试试,代码如下:

把爬到的数据用三引号接收再想办法处理呢 a="""aaa"aa"aa'aa'"""  #a为你实际爬到的数据 b =&nbs

import tesserocrfrom PIL import Imageimage = Image.open('code.jpg')result = tesserocr.image_to_text(image)print(result)

正常使用scrapy或goose等模块时加载的爬虫本身就是异步的。 就算你多只爬虫“同时”启动,“同时”只是对于你人眼睛而言 与远端也是异步的。

在这里我们首先新建了一个 Image 对象,然后调用了 Tesserocr 的 image_to_text() 方法,传入该 Image 对象即可完成识别,实现过程非常简单,识别结果如下:

看看是不是下错了版本 beautifulsoup对应py3和py2的版本是不同的,下载相应的版本pip即可。

JR42

另外 Tesserocr 还有一个更加简单的方法直接将图片文件转为字符串可以达到同样的效果,代码如下:

import tesserocrprint(tesserocr.file_to_text('image.png'))

不过经测试此种方法的识别效果不如上一种方法好。

5. 验证码处理

如上的图片识别基本没有难度,只是新建一个 Image 对象,然后调用 image_to_text() 方法即可得出图片的识别结果。

接下来我们换一个验证码试一下,命名为 code2.jpg,如图 8-3 所示:

1a8a0b6b16372b48e23879d55fd5bdf.png

重新用下面的代码测试一下:

import tesserocrfrom PIL import Imageimage = Image.open('code2.jpg')result = tesserocr.image_to_text(image)print(result)

这时可以看到如下输出结果:

FFKT

发现这次识别和实际的结果有所偏差,这是因为验证码内的多余线条干扰了图片的识别。

对于这种情况,我们还需要做一下额外的处理,如转灰度、二值化等操作。

我们可以利用 Image 对象的 convert() 方法参数传入 L 即可将图片转化为灰度图像,代码如下:

image = image.convert('L')image.show()

传入 1 即可将图片进行二值化处理:

image = image.convert('1')image.show()

另外我们还可以指定二值化的阈值,上面的方法采用的是默认阈值127,不过我们不能用原图直接转化,可以先转为灰度图像,然后再指定二值化阈值转化,代码如下:

image = image.convert('L')threshold = 80table = []for i in range(256):    if i < threshold:        table.append(0)    else:        table.append(1)image = image.point(table, '1')image.show()

在这里我们指定了一个变量 threshold 代表二值化阈值,阈值设置为 80,处理之后我们看一下结果,如图 8-4 所示:

fe4e8d65503415930aa9d6ad720f9f9.png

经过处理之后我们发现原来的验证码中的线条已经被去除了,而且整个验证码变得黑白分明,这时重新识别验证码,代码如下:

import tesserocrfrom PIL import Imageimage = Image.open('code2.jpg')image = image.convert('L')threshold = 127table = []for i in range(256):    if i < threshold:        table.append(0)    else:        table.append(1)image = image.point(table, '1')result = tesserocr.image_to_text(image)print(result)

即可发现运行结果变成了:

PFRT

识别正确。

可见对于一些有干扰的图片,我们做一些灰度和二值化处理,会提高其识别正确率。

6. 本节代码

本节代码地址为:https://github.com/Python3WebSpider/CrackImageCode

7. 结语

本节我们了解了利用 Tesserocr 识别验证码的过程,对于简单的图形验证码我们可以直接用它来得到结果,如果要提高识别的准确度还可以对验证码图片做一下预处理。

以上就是Python3爬虫中识别图形验证码的实例讲解的详细内容,更多关于Python3爬虫识别图形验证码的资料请关注真格学网其它相关文章!

如果你下面那个可以使用个,你就都加上代理就是了,应该是有的网站限制了爬虫的头部数据。虽然你可以通过urlopen返回的数据判断,但是不建议做,增加成本。如果解决了您的问题请采纳!如果未解决请继续追问内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mac使用python识别图形验证码功能
  • python web框架flask实现图形验证码及验证码的动态刷新实例
  • python 生成图形验证码的方法示例
  • python生成随机图形验证码详解
  • 布同自制python函数帮助查询小工具
  • python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
  • python基于pygame实现响应游戏中事件的方法(附源码)
  • python自动查询12306余票并发送邮箱提醒脚本
  • django jwt token restfulapi用户认证详解
  • python中3种内建数据结构:列表、元组和字典
  • python可变参数函数用法实例
  • python实现mysql数据库连接池实例详解
  • python绘制堆叠柱状图的实例
  • 详解python中requirements.txt的一切
  • python 爬虫是否需要设置代理怎么判断
  • 求大佬回答:python3爬虫爬取的一个mp3文件打不开,怎么办?
  • python3爬虫urllib.request.urlopen("网址").read() 本来是utf-8...
  • python3爬虫视频教程求分享
  • python3爬虫爬出的文本如何去掉\n\xa0
  • python3爬虫POST传递参数问题
  • Python3爬虫为什么前面输出好好的,后面就乱了呢
  • python3爬虫数据怎么导出成csv格式
  • python3 爬虫 一定要用beautiful soup吗
  • 有什么好的 python3 爬虫入门教程或书籍吗
  • python 在爬虫中timeout设置超时有什么作用
  • 支持python3的爬虫框架有哪些
  • 各位大神,谁能告诉我python爬虫中怎么去掉网页中的
  • Python中的爬虫Ajax和json什么关系
  • python 爬虫 怎么获取标签中的注释
  • python 爬虫怎么处理爬取数据中含有单引号,并将其存入数据库
  • 如何处理python爬虫中的异步加载
  • 入门python爬虫中,为什么安装beautifulsoap4出错
  • python爬虫抓图程序中的'%s.jpg' % x是什么意思
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页pythonmac使用python识别图形验证码功能python web框架flask实现图形验证码及验证码的动态刷新实例python 生成图形验证码的方法示例python生成随机图形验证码详解布同自制python函数帮助查询小工具python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例python基于pygame实现响应游戏中事件的方法(附源码)python自动查询12306余票并发送邮箱提醒脚本django jwt token restfulapi用户认证详解python中3种内建数据结构:列表、元组和字典python可变参数函数用法实例python实现mysql数据库连接池实例详解python绘制堆叠柱状图的实例详解python中requirements.txt的一切python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解pycharm 2020最新永久激活码(附python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython科学计算环境推荐——anacnumpy使用技巧之数组过滤实例代码pandas 透视表中文字段排序方法详解python中contextlib上下文管理模块的python3读取文件常用方法实例分析matplotlib使用字符串代替变量绘制散点图python文件操作,open读写文件,追加文本内解决python xlrd无法读取excel文件的问题python实现最长公共子序列python实现在多维数组中挑选符合条件的全使用python3实现操作串口详解
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved