python爬虫七:图新验证码的识别

2023-11-08

1、Tesseract安装与简介

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

pip install pytesseract#在python中使用要导入该库

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

2、在代码中使用tesseract

# import pytesseract
# # from PIL import Image #PIL pillow python imaging libray(图像处理库,目前已经停止更新维护了)
# # # 指定Tesseract的安装路径和数据包的路径
# # pytesseract.pytesseract.tesseract_cmd = r'F:\Tesseract-OCR\tesseract.exe'
# # tessdata_dir_config = r'--tessdata-dir "F:\Tesseract-OCR\tessdata"'
# # image = Image.open('demo.jpg')
# # print(pytesseract.image_to_string(image, lang='eng',  config=tessdata_dir_config))

3、用pytesseract处理图形验证码

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

pytesseract.pytesseract.tesseract_cmd = r'F:\Tesseract-OCR\tesseract.exe'
tessdata_dir_config = r'--tessdata-dir "F:\Tesseract-OCR\tessdata"'
url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'
while True:
    request.urlretrieve(url,'code.png')
    image = Image.open('code.png')
    time.sleep(2)
    print(pytesseract.image_to_string(image, lang='eng', config=tessdata_dir_config))

4、打码云平台(识别概率更大,准确率更高)

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 = "code.png"
    img = Image.open(img_path)
    result = base64_api(uname='', pwd='', img=img)
    print(result)

5、验证码获取的时候不与页面同步的解决办法

点击查看如何同步验证码并实现识别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫七:图新验证码的识别 的相关文章

  • 黑马程序员Javaweb学习笔记02【request和response】

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记 方便复习以及加强记忆 系列文章 JavaWeb学习笔记01 BS架构 Maven Tomcat Servlet JavaWeb学习笔记02 request和response Jav
  • 模型训练——Loss函数 归纳汇总

    上一篇文章 语音降噪模型归纳汇总 很意外地收到了点赞收藏和关注 如此的反馈给了我极大的鼓舞 这里就再梳理了一下loss函数相关的知识 以求方便能作为一份工具性质的文章展现出来 能力一般 水平有限 欢迎大家指正 干货分享 欢迎收藏点赞加关注
  • (ESP32学习6)双核CPU的调用

    本来之前从来没有用过双核做东西 但是突然意识到他好像是双核的 所以找了一些资料更第一篇双核的调用 还是挺有趣的 博文会持续更FreeRTOS与双核相关内容 这一章先做一件最简单的事情 在两个核上创建简单任务让他们跑起来 先看代码再讲解 in
  • flink-cdc,clickhouse写入,多路输出

    1 场景 kafka日志数据从kafka读取 1 关联字典表 完善日志数据 2 判断日志内容级别 多路输出 低级 入clickhouse 高级 入clickhouse的同时推送到kafka供2次数据流程处理 2 实现 package com
  • 媒资知识图谱系统

    http wenku baidu com link url xEjnrOeeVaqCc5JNZfuFGewAFKWbPjZDI3FzopmFuDrxYIfXkU3fxaXnPDpI2 6 kvcbnwV 8irUddAmk2JpkZlD2B
  • 太赫兹技术的应用前景

    从振奋全国的神舟五号载人飞船开始 中国的航空进入了发展的快车道 有好奇的朋友问了 天上这么多的卫星 它们之间是怎么 交流 的 在太空中 两颗卫星在地球轨道上 运用传统卫星技术传数据需要一段时间才能完成传送 但太赫兹技术的出现 让卫星们可以不

随机推荐

  • vue3 Element UI使用自定义内容

    这里以Vue3版本的Element UI 举例 这是一个通知组件 通知的内容我们可以通过message参数来控制 例如
  • java解析json获取天气预报城市代码_利用json获取天气信息

    天气预报信息获取是利用json获取的 网上有非常多资源 源码 因为上面涉及到非常多天气信息 包含湿度 出行建议等 以及加入了全部城市代码的资源包 为了练手了解json的原理 我仅获取诚笃城市的最高温 最低温 城市名字 我的布局是通过一个bu
  • vue-cli3+ant-design-vue+typescript 注意事项

    项目参考vue cli3 web init ant design配置部分 1 实现ant disign vue的按需加载方案 1 引入所有的组件 然后加载到vue上面 components ant 2 对Ant Design Vue进行文件
  • unique_ptr的使用和陷阱

    转自 https blog csdn net qq 33266987 article details 78784286 unique ptr的使用 分配内存 与shared ptr不同 unique ptr没有定义类似make shared
  • JavaScript基础Day06:内置对象

    JavaScript基础Day06 内置对象 文章目录 JavaScript基础Day06 内置对象 如何学习一个方法 一 Math对象 二 Date对象 三 String对象 四 Array对象 五 基本包装类型 JavaScript中的
  • 【Docker】docker设置固定ip地址

    1 美图 2 概述 docker设置固定ip地址 Docker安装后 默认会创建下面三种网络类型 docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge brid
  • vue设置页面滚动高度_vue中获取滚动高度或指定滚动到某位置

    1 点击某个标签 滚动到某个具体位置 switchHeight num this selectNum num if num 0 document getElementById identifer one scrollIntoView els
  • Verilog测试(仿真)文件TestBench如何编写

    一 哪些步骤需要进行仿真 下图是FPGA开发的整个流程 先看一下仿真都出现在哪里 流程图中绿色的步骤是要进行测试仿真的 即有三个步骤是要进行仿真操作的 有时会省略 综合后仿真 这一步 1 RTL仿真 也称为综合前仿真 前仿真和功能仿真 这一
  • 【正点原子STM32连载】第二十一章 高级定时器输出指定个数PWM实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • 大端对齐和小端对齐

    其实大端对齐和小端对齐 迷惑的原因无非是名字问题 这里为了方便记忆 我们可以将big endian little endian 翻译成大尾端对齐和小尾端对齐 大尾端对齐是网络字节序对齐的一种方式 int i 0x12345678 char
  • 快速解决 pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再 试一次。

    pnpm 无法将 pnpm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再 试一次 所在位置 行 1 字符 1 运行 npm install pnpm g 后 启动项目报错
  • driver +Chrome+proxy

    from selenium import webdriver import time from selenium webdriver common by import By from selenium webdriver chrome op
  • C语言基础知识

    文章目录 基本数据类型 浮点数比较 常用math函数 循环结构 数组 结构体 字符串 基本数据类型 整型int 一个整数占用32位 bit 即4字节 Byte 取值范围 231 231 1 即绝对值109以内整数 长整型long long
  • react实现按需加载的3种方法

    react实现按需加载的3种方法 1 精确加载组件 import Button from antd lib button import antd lib button style 2 暴露配置 配合babel plugin import插件
  • 不要只满足于写业务逻辑

    最近在知乎上 看到三个程序员失业 当然 失业是正常的 我自己就失业多次 他们的共同点 是只会写业务逻辑 其中有一个是工作八年的 创业公司失败的 我觉得他找工作应该好找 如果我8年全职经验 可以横着走了 让我惊讶的是 他说一年的工作经验用了八
  • HardFault排查

    HardFault排查 背景知识简介 发生中断时处理器的行为 HardFault错误信息的挖掘 编译器通过栈来实现函数调用 对信息的继续挖掘 通用寄存器 特殊功能寄存器 SCB寄存器 附录一 Hardfault Handler示例代码 附录
  • 矩阵的转置

    稀疏矩阵 当一个矩阵中的很多元素都是零 而且非零元素的分布没有规律时 该矩阵称为稀疏矩阵 稀疏矩阵的压缩存储方法 从稀疏矩阵的概念 我们可以知道 稀疏矩阵的大多元素都是零 所以 我们只需要存储非零元素即可 这时 我们引入三元组表的概念 三元
  • redis数据类型List的安全队列和不安全队列

    在学习RPOPLPUSH命令的时候 官方文档中有提到安全队列和不安全的队列 一开始没有看懂 现在理解了做个笔记 一般情况下 我们可以借助List来实现消息队列 比如一个客户端通过命令LPUSH BLPUSH 把消息入队 另一个客户端通过命令
  • C语言 指针初阶

    头文件 define CRT SECURE NO WARNINGS 1 include
  • python爬虫七:图新验证码的识别

    1 Tesseract安装与简介 阻碍我们爬虫的 有时候正是在登录或者请求一些数据时候的图形验证码 因此这里我们讲解一种能将图片翻译成文字的技术 将图片翻译成文字一般被称为光学文字识别 Optical Character Recogniti