Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
今日的验证码之旅
今天你要学习的验证码采用通过第三方AI平台开放的OCR接口实现,OCR文字识别技术目前已经比较成熟了,而且第三方比较多,今天采用的是百度的。
注册百度AI平台
官方网址:http://ai.baidu.com/
接下来申请
接下来创建一个简单应用之后,就可以使用了,我们找到
阅读文字识别相关文档
你需要具备基本的阅读第三方文档的能力,打开我们需要的文档
https://cloud.baidu.com/doc/OCR/OCR-API.html#.E9.80.9A.E7.94.A8.E6.96.87.E5.AD.97.E8.AF.86.E5.88.AB
这个页面基本上已经把我们需要做的所有内容都已经标识清楚了
编写获取accesstoken的代码
在目前主流的API开发模式下,都是需要你进行accesstoken的获取的
代码如下 ,重点需要参照文档进行传参的设计
def get_accesstoken(self):
res = requests.post(self.url.format(self.key,self.secret),headers=self.header)
content = res.text
if (content):
return json.loads(content)["access_token"]
得到accesstoken之后,你可以继续下面的操作
import requests
import json
import base64
import urllib.request, urllib.parse
class GetCode(object):
def __init__(self):
self.url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}"
self.api = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}"
self.header = {
"Content-Type":'application/json; charset=UTF-8'
}
self.key = "你的KEY"
self.secret = "你的SECRET"
验证码识别阶段
普通没有干扰的验证码,我们直接识别即可,但是有的验证码还是有干扰的,在识别之前,需要对它进行基本的处理,我们采用和上篇文章类似的办法进行,对它进行灰度处理和二值化操作。部分代码我直接硬编码了,不过最终识别的效果并没有比想象的优化多少。
def init_table(self,threshold=155):
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
return table
def opt_image(self):
im = Image.open("66.png")
im = im.convert('L')
im = im.point(self.init_table(), '1')
im.save('66_s.png')
return "66_s.png"
调用验证码接口
调用百度的验证码接口,不使用百度给的模块直接编写。按照它对应的文档,书写即可。
在这个地方尤其注意官方文档提示
def get_file_content(self,file_path):
with open(file_path, 'rb') as fp:
base64_data = base64.b64encode(fp.read())
s = base64_data.decode()
data = {}
data['image'] = s
decoded_data = urllib.parse.urlencode(data)
return decoded_data
def show_code(self):
image = self.get_file_content(self.opt_image())
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
res = requests.post(self.api.format(self.get_accesstoken()),headers=headers,data=image)
print(res.text)
通过百度模块调用验证码识别
安装百度AI
pip install baidu-aip
安装之后,就可以使用啦
- 声明一些常量,你在百度创建应用之后就可以获取
- 初始化文字识别类
- 调用对应的方法
参考代码
from aip import AipOcr
# 定义常量
APP_ID = '15736693'
API_KEY = '你的KEY'
SECRET_KEY = '你的SECRET'
# 初始化文字识别
aipOcr=AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
filePath = "1.jpg"
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 定义参数变量
options = {
'detect_direction': 'true',
'language_type': 'CHN_ENG',
}
# 网络图片文字文字识别接口
result = aipOcr.webImage(get_file_content(filePath),options)
print(result)
编码后记
这种通过第三方OCR技术识别验证码的方式,本质上和上篇文章的原理是一致的
在实测过程中发现,没有太多干扰线,搜狗,腾讯,有道 基本表现一致
对于这种方式,学会即可~,道理都是一致的,当然你可以用Python实现一个图片转文字的小应用是没有任何问题的
欢迎关注非本科程序员公众账号, 发送 ocr 获取源码
Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术的更多相关文章
- Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!
python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...
- Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...
- Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...
- Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...
- Python爬虫入门四之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- 转 Python爬虫入门四之Urllib库的高级用法
静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...
- 2019-03-22 Python Scrapy 入门教程 笔记
Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...
- Python基础入门教程
Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...
随机推荐
- Oracle12c中数据泵新特性之功能增强(expdp, impdp)
Oracle的数据泵功能在10g中被引进.本文对数据泵在12c中的增强做一个概览. 1. 禁用日志选项(DISABLE_ARCHIVE_LOGGING) Impdp的TRANSFORM参数已经扩展 ...
- ios WKWebView 与 JS 交互实战技巧
一.WKWebView 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新 ...
- 利用Python脚本悄无声息的遥控室友电脑开机密码!
整蛊一下室友就行了,切勿用于非法用途! 利用python脚本控制室友windows系统电脑的开机密码.利用random()生成随机数(密码),天知地知,密码只有你自己知道! Python代码分为cli ...
- 15.linux基础
1.目录 /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录.所有的东西都是从这里开始.当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录 ...
- 详解Trie
一.Trie的概念 Trie又称字典树,前缀树(事实上前缀树这个名字就很好的解释了Trie的储存方式) 来一张图理解一下Trie的储存方式:(图片来自百度百科) 由这张图我们也可以知道Trie的特点: ...
- ubuntu16+zabbix3.4+grafana环境搭建记录
最近研究了zabbix,稍后放上环境搭建教程,建议想学习搭建的同学记得参考zabbix官网
- Python_内置四种队列
from queue import Queue #LILO队列q = Queue() #创建队列对象q.put(0) #在队列尾部插入元素q.put(1)q.put(2)print('LILO队列', ...
- Rocketmq 集群
写在前面 Rocketmq采用apache rockemq 4.2.0release版本. 源码路径(http://mirrors.shu.edu.cn/apache/rocketmq/4.2.0/r ...
- 读《图解HTTP》有感-(HTTP首部)
写在前面 该章节是对请求报文及响应报文的首部信息进行解析.通过该章节的学习,相信大家对首部结构,及各个首部字段的作用有个基本的了解 正文 HTTP报文由HTTP报文首部.空行以及HTTP报文主体组成. ...
- Series
Series是一种类似于一维数组的对象,是由一维数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成. In [1]: from pandas import Series In [2 ...