热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第二十三节:scrapy爬虫识别验证码(一)字母数字组合验证码识别

图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,然后通过一些干扰线的绘制而形成图片验证码。例如:知网的注册就有图片验证码首先我们需要获取验证

图片验证码基本上是有数字和字母或者数字或者字母组成的字符串,然后通过一些干扰线的绘制而形成图片验证码。

例如:知网的注册就有图片验证码

 

首先我们需要获取验证码图片,通过开发者工具我们可以得到验证码url链接

 

其次就是通过Pillow类库和tesserocr进行识别,代码如下:

1 # -*- coding:utf-8 -*-
2 import tesserocr
3 from PIL import Image
4 import requests
5
6 # 通过url链接获取验证码图片,并写入本地文件夹里
7 def get_image(path,url):
8 """
9 :param path: 文件夹路径
10 :param url: 验证码url链接
11 """
12 respon = requests.get(url=url) # 请求验证码url
13 with open(path,"wb") as file:
14 file.write(respon.content) # 将验证码写到本地
15
16
17 # 由于验证码图片太小,需要对验证码图片放大处理,以便识别
18 def reset_image_size(image_path):
19 """
20 :param image_path: 图片所在的路径
21 :return:
22 """
23 image = Image.open(fp=image_path) # 打开图片
24 pic_resize = 5 # 设置图片放大或者缩小倍数
25 (x, y) = image.size # 获取图片的大小
26 x_s = int(x * pic_resize) # 放大5倍(可调)
27 y_s = int(y * pic_resize) # 放大5倍(可调)
28 out = image.resize((x_s, y_s), Image.ANTIALIAS) # ANTIALIAS表示高质量图片
29 out.save(image_path)
30
31
32 # 读取验证码图片文本
33 def read_image(image_path):
34 """
35 :param image_path: 验证码图片路径
36 :return:
37 """
38 image = Image.open(fp=image_path) # 打开验证码图片
39 image = image.convert('L') # 将验证码图片转换为灰度图(L表示灰度图)
40 threshold = 127 # 设置灰度图二值化阈值
41 table = []
42 for i in range(256): # 像素为256
43 if i < threshold:
44 table.append(0)
45 else:
46 table.append(1)
47 image &#61; image.point(table, &#39;1&#39;) # 二值化处理后的副本(1表示二值化)
48 image.show()
49 result &#61; tesserocr.image_to_text(image) # 验证码图片转换为文本
50 return result
51
52
53 # 验证码识别信息脏数据处理
54 def VerifInfo(result):
55 """
56 :param result: 验证码图片通过初步识别后得到的脏数据
57 :return:
58 """
59 verif_str &#61; "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
60 verif_list &#61; []
61 for i in result:
62 if i in verif_str:
63 verif_list.append(i)
64 return "".join(verif_list)
65
66
67
68 if __name__ &#61;&#61; &#39;__main__&#39;:
69 img_path &#61; "D:\photo\image" # 文件夹目录
70 img_path &#61; img_path &#43; "\VerificationCode.png" # 验证码图片所在的目录及名称
71 img_url &#61; "http://my.cnki.net/elibregister/CheckCode.aspx" # 验证码url
72 get_image(img_path,img_url) # 获取验证码图片
73 reset_image_size(img_path) # 调整验证码图片大小
74 result &#61; read_image(img_path) # 读取验证码图片内容
75 verif_info &#61; VerifInfo(result) # 验证码内容数据处理
76 verif_len &#61; len(verif_info) # 验证码识别长度
77 if verif_len &#61;&#61; 4 and verif_info:
78 print(verif_info)
79 else:
80 pass

图片字母数字验证码识别

最后就是看看识别的效果吧。前者为原始验证码图片&#xff0c;后者是经过二值化处理的图片。

 

输出的结果为&#xff1a;FZug

显然使用tesserocr识别还是有误差的&#xff0c;以后可以用深度学习的方式训练处一个模型&#xff0c;可以提高识别效率&#xff0c;后期会跟进实现的。

转:https://www.cnblogs.com/zhaco/p/10960339.html



推荐阅读
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
author-avatar
卫宇欢试试
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有