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);