现在基本每个网站在登录
或注册
时都会要求输入验证码才能进行后续操作,在爬知乎时,小菜就遇到了这个问题,所以单独将云打码识别验证码记录一下。云打码
属于第三方平台,所以识别需要收费,费用个人觉得还可以接受。
1.注册用户
进入云打码官方网站,进入用户注册,后面注册请小伙伴自行完成。
2.注册开发者账号
进入云打码官方网站,进入开发者注册,后面注册请小伙伴自行完成。
完成后,点击我的软件
,在右上角点击添加软件
,给自己软件起个名字(随便起了),确定后会有一个软件代码
,通信密钥
,这个是我们后面要用到的
3.开始测试
目录结构
test
|-image
|-1.jpg
|-2.png
|-main.py
安装requests
如果没有安装anaconda
可以参考我之前的帖子anacoda 安装使用
main.py
import os
import json
import requests
class YDMHttp(object):
apiurl = 'http://api.yundama.com/api.php'
username = ''
password = ''
appid = ''
appkey = ''
def __init__(self, username, password, appid, appkey):
self.username = username
self.password = password
self.appid = str(appid)
self.appkey = appkey
#查询余额
def balance(self):
data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}
response_data = requests.post(self.apiurl, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
return ret_data["balance"]
else:
return None
#登录
def login(self):
data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}
response_data = requests.post(self.apiurl, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
return ret_data["uid"]
else:
return None
#识别验证码
def decode(self, filename, codetype, timeout):
data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
files = {'file': open(filename, 'rb')}
response_data = requests.post(self.apiurl, files=files, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
return ret_data["text"]
else:
return None
def ydm(file_path):
#用户账号
username = '******'
#用户密码
password = '******'
#开发者 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appid = 9428
#开发者 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = '6a355daa67da003904ebf6f40c1f20c3'
# 图片文件
filename = file_path
# 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 5000
# 超时时间,秒
timeout = 60
# 检查
yundama = YDMHttp(username, password, appid, appkey)
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
return yundama.decode(file_path, codetype, timeout)
if __name__ == "__main__":
img_path = os.path.abspath(__file__)
dir_name = os.path.dirname(img_path)
b = ydm(dir_name + '/image/1.jpg')
print(b)
在代码中调试,运行main.py
可以在控制台看到成功识别出验证码