python爬虫验证码_Python爬虫遇到验证码的几种处理方式

# -*- coding : utf-8 -*-

# @Time : 2020/10/22 14:12

# @author : 沙漏在下雨

# @Software : PyCharm

# @CSDN : https://me.csdn.net/qq_45906219

import muggle_ocr

import os

from aip import AipOcr

"""

PS: 这个作用主要是作了一个封装 把2个常用的图片/验证码识别方式合在一起 怎么用 取决于自己

接口1: muggle_ocr

pip install muggle-ocr 这个下载有点慢 最好使用手机热点

目前镜像网站(清华/阿里) 还没有更新到这个包 因为这个包是最新的一个ocr模型

接口2: baidu-aip

pip install baidu-aip

这个知道的人应该很多很多, 但是我觉得还是muggle 这个新包猛的一比

调用方式 可以参考官网文档: https://cloud.baidu.com/doc/OCR/index.html

或者使用我如下的方式 都是ok的

:param image_path 待识别的图片路径 如果目录很深 推荐使用绝对路径

"""

class MyOrc:

def __init__(self):

# 设置一些必要信息 使用自己百度aip的内容

APP_ID = '你的ID'

API_KEY = '你的KEY'

SECRET_KEY = '你的SECRET_KEY'

self.client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

def return_path(self, test_image):

""":return abs image_path"""

# 确定路径

if os.path.isabs(test_image):

filepath = test_image

else:

filepath = os.path.abspath(test_image)

return filepath

def return_image_content(self, test_image):

""":return the image content """

with open(test_image, 'rb') as fr:

return fr.read()

def return_ocr_by_baidu(self, test_image):

"""

ps: 先在__init__ 函数中完成你自己的baidu_aip 的一些参数设置

这次测试使用 高精度版本测试

如果速度很慢 可以换回一般版本

self.client.basicGeneral(image, options)

相关参考网址:

https://cloud.baidu.com/doc/OCR/s/3k3h7yeqa

:param test_image: 待测试的文件名称

:return: 返回这个验证码的识别效果 如果错误 可以多次调用

"""

image = self.return_image_content(test_image=self.return_path(test_image))

# 调用通用文字识别(高精度版)

# self.client.basicAccurate(image)

# 如果有可选参数 相关参数可以在上面的网址里面找到

options = {}

options["detect_direction"] = "true"

options["probability"] = "true"

# 调用

result = self.client.basicAccurate(image, options)

result_s = result['words_result'][0]['words']

# 不打印关闭

print(result_s)

if result_s:

return result_s.strip()

else:

raise Exception("The result is None , try it !")

def return_ocr_by_muggle(self, test_image, mode=1):

"""

调用这个函数使用 muggle_ocr 来进行识别

:param test_image 待测试的文件名称 最好绝对路径

:param 模型 mode = 0 即 ModelType.OCR 表示识别普通印刷文本

当 mode = 1 默认 即 ModelType.Captcha 表示识别4-6位简单英输验证码

官方网站: https://pypi.org/project/muggle-ocr/

:return: 返回这个验证码的识别结果 如果错误 可以多次调用

"""

# 确定识别物品

if mode == 1:

sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)

elif mode == 0:

sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.OCR)

else:

raise Exception("The mode is 0 or 1 , but your mode == ", mode)

filepath = self.return_path(test_image=test_image)

with open(filepath, 'rb') as fr:

captcha_bytes = fr.read()

result = sdk.predict(image_bytes=captcha_bytes)

# 不打印关闭

print(result)

return result.strip()

# a = MyOrc()

# a.return_ocr_by_baidu(test_image='test_image/digit_img_1.png')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值