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);
版权声明:本文为cq146637原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。