python爬虫之图形验证码学习

2023-10-27

1. Tesseract介绍

有时候我们在登录或者请求一些数据时候会遇到图形验证码。因此我们引入一种能将图片翻译成文字的技术。将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition),简写为OCR。
实现OCR的库不是很多,特别是开源的。因为这块存在一定的技术壁垒(需要大量的数据、算法、机器学习、深度学习知识等),并且如果做好了具有很高的商业价值。因此开源的比较少。
这里就介绍一个图形识别开源库Tesseract。Tesseract是⼀个将图像翻译成文字的OCR(光学文字识别,Optical Character Recognition),目前由谷歌赞助。Tesseract是目前公认最优秀、最准确的开源OCR库。Tesseract具有很高的识别度,也具有很高的灵活性,他可以通过训练识别任何字体。

2. Tesseract安装

Windows系统安装可以在以下链接下载可执行文件:
https://github.com/tesseract-ocr/

安装步骤分为:
(1)在Python中调用Tesseract:

pip install pytesseract

(2)安装可执行文件,设置环境变量
安装完成后,如果想要在命令行中使用Tesseract,那么应该设置环境变量。Mac和Linux在安装的时候就默认已经设置好了。在Windows 下把tesseract.exe所在的路径添加到PATH环境变量中。还有一个环境变量需要设置的是,要把训练的数据文件路径也放到环境变量中。在环境变量中, 添加一个

TESSDATA_PREFIX=D:\Tesseract-OCR\tessdata

进⼊cmd输⼊下面的命令查看版本,正常运行则安装成功

tesseract --version

在这里插入图片描述
在这里插入图片描述
识别的语言只有两种语言,若要识别中文语言,需要下载语言安装包
URL地址:https://github.com/tesseract-ocr/tessdat

3. Tesseract使用

案例1

import pytesseract
from PIL import Image # Pillow 图像处理库 2011年

# 指定tesseract驱动的路径和数据包的路径
pytesseract.pytesseract.tesseract_cmd = r"D:\Tesseract\Tesseract-OCR\tesseract.exe"
tessdata_dir_config = r'--tessdata-dir "D:\Tesseract\Tesseract-OCR\tessdata"'
# 打开图片
image = Image.open('demo.jpg')
# 识别的结果 第一个参数是图片 第二个参数是语言 第三个参数是 配置
result = pytesseract.image_to_string(image, lang='eng',  config=tessdata_dir_config)
result_strip = result.replace(' ','')
print(result,'\n',result_strip,)
# 7 3 6 4 
#  7364

在这里插入图片描述
案例2

import pytesseract
from PIL import Image
from urllib import request
import time

# 指定tesseract驱动的路径和数据包的路径
pytesseract.pytesseract.tesseract_cmd = r"D:\Tesseract\Tesseract-OCR\tesseract.exe"
tessdata_dir_config = r'--tessdata-dir "D:\Tesseract\Tesseract-OCR\tessdata"'

# 识别验证码图片
while True:
    # 获取图片验证码的地址
    url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'
    # 第一个参数目标url 第二个参数 文件名/保存的路径
    request.urlretrieve(url,'captcha.png')
    # 打开图片
    image = Image.open('captcha.png')
    # 结果
    result = pytesseract.image_to_string(image, lang='eng', config=tessdata_dir_config)
    print(result.replace(' ',''))
    time.sleep(2)

在这里插入图片描述
在这里插入图片描述

4. 打码云平台

在这里简单介绍一个识别验证码的平台,需要花费去帮忙识别验证码,但是价格相对较便宜。有需要的可以去看看
http://www.ttshitu.com/
网址如上,操作的python代码如下

import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info


def base64_api(uname, pwd, img):
    img = img.convert('RGB')
    buffered = BytesIO()
    img.save(buffered, format="JPEG")
    if version_info.major >= 3:
        b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
    else:
        b64 = str(base64.b64encode(buffered.getvalue()))
    data = {"username": uname, "password": pwd, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""


if __name__ == "__main__":
    img_path = "C:/Users/Administrator/Desktop/file.jpg"   #  图片路径位置
    img = Image.open('captcha.png')    # 图片名字
    result = base64_api(uname='123', pwd='123', img=img)  # uname 是用户名字    pwd 是用户登陆密码
    print(result)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫之图形验证码学习 的相关文章

随机推荐

  • 海思his35xx安防芯片音视频媒控驱动基础篇MIPI RX模块(一)

    先给自己打个广告 本人的微信公众号正式上线了 搜索 张笑生的地盘 主要关注嵌入式软件开发 股票基金定投 足球等等 希望大家多多关注 有问题可以直接留言给我 一定尽心尽力回答大家的问题 二维码如下 一 背景介绍 海思芯片的应用方向大致分为如下
  • python安装库出现retrying-Python之retrying

    retrying是一个很好用的关于重试的Python包 可以用来自动重试一些可能会运行失败的程序段 为什么选择retrying 我们在写一些程序的时候 会去调用一些外部资源 组件 这些外部程序对我们来说是不可控的 所以它们不可用 运行失败都
  • SqlServer数据库删除数据

    数据库删除数据的三种代码方式 1 删除表结构及所有数据 drop table table name 2 恢复表格出厂设置 id清空 truncate table table name 3 删除表数据 delete from table na
  • 期货怎么满仓(期货为什么不能满仓操作)

    期货满仓怎么bao cang q 您是想问期货满仓爆仓怎么处理吗 满仓交易的风险就是会强制平仓 也就是所谓的爆仓 爆仓是指 1 投资者帐户权益为负数 表明投资者不仅输光了全部保证金而且还倒欠期货经纪公司债务 2 发生爆仓时 投资者必须及时将
  • 红帽认证主要考哪些内容呢

    红帽认证考试主要考以下内容 RH124 红帽系统管理I 主要涉及访问命令行 从命令行访问文件 获取RHCEL7帮助信息 创建及查看编辑文件 管理用户和用户组 管理文件和目录权限 监视和管理Linux进程 控制服务和后台进程 管理OpenSS
  • Android自定义自动换行LinearLayout探索与实现

    Android自定义自动换行LinearLayout探索与实现 在Android开发中 我们经常需求实现一些特定的布局效果以满足用户的需求 其中之一就是自动换行布局 即当容器内的子视图数量超过一行时 自动将多余的子视图放到下一行进行显示 本
  • go语言试用标准c 库,Go语言开发(十三)、Go语言常用标准库三

    Go语言开发 十三 Go语言常用标准库三 一 sync 1 sync简介 sync提供基本的同步原语 如sync Mutex sync RWMutex sync Once sync Cond sync Waitgroup 除了Once和Wa
  • Vue Collapse 中嵌套 Collapse 折叠板在tab切换后打不开了

    name也要改成indx 监听tab改变 清空vModel 在给vModel赋值 这样就解决了
  • Hive元数据上亿级别存储方案的实践

    问题导读1 什么是元数据 Federation 方案 2 怎样引入 Federation 方案 3 怎样改造现有服务 背景Apache Hive 是基于 Apache Hadoop 之上构建的数据仓库 提供了简单易用的类 SQL 查询语言
  • 备份Vss工程&建立Vss目录安全体系

    一 使用备份文件 ssa进行恢复时 1 若原来作的是archive all the date的备份 并且没有将原project删除 则 永久删除 原来的project再作恢复 2 若原来作的 archive this version and
  • springboot连接redis并动态切换database

    springboot连接redis并动态切换database 众所周知 redis多有个db 在jedis中可以使用select方法去动态的选择redis的database 但在springboot提供的StringRedisTemplat
  • KVM虚拟机热扩容

    创建一个虚拟机用于练习在线扩容 virt install name centos8 3 memory 4096 currentMemory 1024 vcpus 2 maxvcpus 8 disk var lib libvirt image
  • 解决echarts饼图显示百分比,和显示内容字体及大小,如何给eCharts饼图区域指定颜色

    解决echarts饼图显示百分比 和显示内容字体及大小 基于准备好的dom 初始化echarts实例 var pieEchart echarts init document getElementById pieEchart 指定图表的配置项
  • 模糊查询java.sql.SQLException: ORA-00933: SQL 命令未正确结束 踩坑经历

    ORA 00933 1 仔细检查sql语句是否缺少逗号 2 关键字是否缺少空格 3 SQL语句中缺少关键字或者多了某个关键字 and 4 在做模糊查询时 在仔细反复检查SQL语句的前提下 未发现错误 在数据库中能正确运行 控制台就报java
  • linux下acm串口读写,使用socat将Linux终端从串口转发到TCP

    我正在开发嵌入式ARM平台Slackware 我正在使用G24 Java调制解调器 它配置为在端口 dev ttyS1和 dev ttyACM0之间转发数据 因此任何进入任何这些端口的东西都可以在另一个端口上看到 我想在其中一个端口 dev
  • 常用的前端地图框架(WebGIS框架)

    常用的前端地图框架 WebGIS框架 1 Leaflet Leaflet 是最著名的前端地图可视化库 它开源 体积小 结构清晰 简单易用 2 Mapbox GL JS Mapbox GL JS 是目前最新潮的前端地图库 它的矢量压缩 动态样
  • 虚函数表

    虚函数表是实现多态的核心 所谓多态 就是 一个函数 多种实现 当我们通过类指针或引用调用一个函数接口时 编译器在运行期间将会根据该指针或引用实际指向的对象来调用函数 而这就是通过虚函数表来实现的 换种方式说 虚函数表 完成了动态联编中寻找虚
  • 难学吗计算机网络,自学计算机网络技术难吗?应该怎么学?

    感谢邀请 根据我所知道的回答一下这个问题 小编本科学习的数学 根计算机网络不搭边 后来工作中因为需要 学习的计算机网络 根据自己的学习历程说一说哈 如有不当请批评指正 网络基础很重要网络基础知识犹如地基 非常重要 理解网络设备的配置命令 排
  • java calendar 天_Java Calendar getActualMaximum()用法及代码示例

    Calendar类的getActualMaximum int field value 方法用于根据此Calendar的时间值返回指定日历字段可能具有的最大值 用法 public int getActualMaximum int field
  • python爬虫之图形验证码学习

    python爬虫之图形验证码学习 1 Tesseract介绍 2 Tesseract安装 3 Tesseract使用 4 打码云平台 1 Tesseract介绍 有时候我们在登录或者请求一些数据时候会遇到图形验证码 因此我们引入一种能将图片