十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“Python爬虫遇到验证码的处理方式有哪些”,在日常操作中,相信很多人在Python爬虫遇到验证码的处理方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python爬虫遇到验证码的处理方式有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
站在用户的角度思考问题,与客户深入沟通,找到峡江网站设计与峡江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网络空间、企业邮箱。业务覆盖峡江地区。
封装源码:
学会调用百度的aip接口:
1. 首先需要注册一个账号:
https://login.bce.baidu.com/
注册完成之后登入
2. 创建项目
在这些技术里面找到文字识别,然后点击创建一下项目
创建完成之后:
图片中 AppID , API key, Secret Key 这些待会是需要用的。
下一步可以查看官网文档,或者直接使用我写的代码
3. 安装一下依赖库 pip install baidu-aip
这只是一个接口, 需要前面的一些设置。
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 !")
扩展百度的色情识别接口:
我们写代码肯定是要找点乐子的, 不可能这么枯燥无味吧?
色情识别接口在 内容审核中, 找一下就可以了。
调用方式源码:
# -*- coding : utf-8 -*- # @Time : 2020/10/22 17:30 # @author : 沙漏在下雨 # @Software : PyCharm # @CSDN : https://me.csdn.net/qq_45906219 from aip import AipContentCensor from ocr import MyOrc class Auditing(MyOrc): """ 这是一个调用百度内容审核的aip接口 主要用来审核一些色情 反恐 恶心 之类的东西 网址: https://ai.baidu.com/ai-doc/ANTIPORN/tk3h7xgkn """ def __init__(self): # super().__init__() APP_ID = '填写你的ID' API_KEY = '填写你的KEY' SECRET_KEY = '填写你的SECRET_KEY' self.client = AipContentCensor(APP_ID, API_KEY, SECRET_KEY) def return_path(self, test_image): return super().return_path(test_image) def return_image_content(self, test_image): return super().return_image_content(test_image) def return_Content_by_baidu_of_image(self, test_image, mode=0): """ 继承ocr中的一些方法, 因为都是放一起的 少些一点代码 内容审核: 关于图片中是否存在一些非法不良信息 内容审核还可以实现文本审核 我觉得有点鸡肋 就没一起封装进去 url: https://ai.baidu.com/ai-doc/ANTIPORN/Wk3h7xg56 :param test_image: 待测试的图片 可以本地文件 也可以网址 :param mode: 默认 = 0 表示 识别的本地文件 mode = 1 表示识别的图片网址连接 :return: 返回识别结果 """ if mode == 0: filepath = self.return_image_content(self.return_path(test_image=test_image)) elif mode == 1: filepath = test_image else: raise Exception("The mode is 0 or 1 but your mode is ", mode) # 调用色情识别接口 result = self.client.imageCensorUserDefined(filepath) # """ 如果图片是url调用如下 """ # result = self.client.imageCensorUserDefined('http://www.example.com/image.jpg') print(result) return result a = Auditing() a.return_Content_by_baidu_of_image("test_image/2.jpg", mode=0)
学会muggle_ocr 识别接口:
这个包是最近火起来的, 使用起来很简单, 没多少其他函数
安装 pip install muggle-ocr 这个下载有点慢 最好使用手机热点 目前镜像网站(清华/阿里) 还没有更新到这个包 因为这个包是最新的一个ocr模型 12
调用接口
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()
封装源码:
# -*- 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')
到此,关于“Python爬虫遇到验证码的处理方式有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!