现在基本每个网站在登录注册时都会要求输入验证码才能进行后续操作,在爬知乎时,小菜就遇到了这个问题,所以单独将云打码识别验证码记录一下。云打码属于第三方平台,所以识别需要收费,费用个人觉得还可以接受。

1.注册用户

进入云打码官方网站,进入用户注册,后面注册请小伙伴自行完成。

2.注册开发者账号

进入云打码官方网站,进入开发者注册,后面注册请小伙伴自行完成。

完成后,点击我的软件,在右上角点击添加软件,给自己软件起个名字(随便起了),确定后会有一个软件代码通信密钥,这个是我们后面要用到的

ssl

3.开始测试

目录结构

test
|-image
   |-1.jpg
   |-2.png
|-main.py

安装requests

如果没有安装anaconda可以参考我之前的帖子anacoda 安装使用

conda install requests

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可以在控制台看到成功识别出验证码

python 杂记

python 学习资料 centos7安装 python3.6 python anaconda安装 vscode pycharm 选择anaconda虚拟环境 python 云打码识别验证码 知乎中文倒立验证码识别