zoukankan      html  css  js  c++  java
  • Scrapy学习-14-验证码识别

    3种实现方案
     
    1. 编码实现 tesseract-ocr
      谷歌开源的识别工具,自己实现代码编码,投入精力大,回馈低。且平台验证码更换周期短,编好的代码容易失效

    2. 在线打码
      在线平台提供,识别率90%以上
      http://www.yunzhuan.com/

    3. 人工打码
      效率低,准确率高
     
    这里主要实现第二种,贴上代码
    # 在与代码同一个目录下创建一个Images文件夹,放一些测试验证码图片,我们就可以测试了
    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:
                print("获取剩余积分", ret_data["balance"])
                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:
                print("登录成功", ret_data["uid"])
                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:
                print("识别成功", ret_data["text"])
                return ret_data["text"]
            else:
                return None
    
    
    def ydm(file_path):
        username = 'da_ge_da1'
        # 密码
        password = 'da_ge_da'
        # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appid = 3129
        # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appkey = '40d5ad41c047179fc797631e3b9c3025'
        # 图片文件
        filename = 'image/captcha.jpg'
        # 验证码类型,# 例: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__":
        # 用户名
        username = 'da_ge_da1'
        # 密码
        password = 'da_ge_da'
        # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appid = 3129
        # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
        appkey = '40d5ad41c047179fc797631e3b9c3025'
        # 图片文件
        filename = 'image/captcha.jpg'
        # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
        codetype = 5000
        # 超时时间,秒
        timeout = 60
        # 检查
        if (username == 'username'):
            print ('请设置好相关参数再测试')
        else:
            # 初始化
            yundama = YDMHttp(username, password, appid, appkey)
    
            # 登陆云打码
            uid = yundama.login();
            print('uid: %s' % uid)
    
            # 登陆云打码
            uid = yundama.login();
            print ('uid: %s' % uid)
    
            # 查询余额
            balance = yundama.balance();
            print ('balance: %s' % balance)
    
            # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
            text = yundama.decode(filename, codetype, timeout);
  • 相关阅读:
    Python学习杂记_2_格式化字符串的一些操作
    Python学习杂记_1_PyCharm使用的一些收获
    学习总结——接口测试中抓包工具的使用
    学习总结——JMeter做WebService接口功能测试
    学习总结——JMeter做http接口压力测试
    学习总结——JMeter做http接口功能测试
    学习总结——Postman做http接口功能测试
    学习总结——接口测试基础
    伊始
    python 内置函数
  • 原文地址:https://www.cnblogs.com/cq146637/p/9072788.html
Copyright © 2011-2022 走看看