python爬虫验证码的处理(云打码)_python爬虫验证码的处理(云打码)

爬虫开发过程中经常会遇到验证码,对于普通的非滑块验证码,首先要想办法把验证码图片保存到本地:用抓包工具抓包查看验证码图片的url,通过这个url把图片下载写到二进制文件。接下来对验证码的处理方法有三种:

手动输入验证码

接入打码平台

更换ip绕过验证码

先简要介绍一下如何接入打码平台实现自动打码。我选择的是云打码:http://www.yundama.com。注册成为开发者,找客服可以要到调试分用来调试,查看开发文档。

打开YDMPython3.x.py查看源码(Python2调用示例对应的是YDMPython2.x.py):

# -*- coding: cp936 -*-

import sys

import os

from ctypes import *

# 下载接口放目录 http://www.yundama.com/apidoc/YDM_SDK.html

# 错误代码请查询 http://www.yundama.com/apidoc/YDM_ErrorCode.html

# 所有函数请查询 http://www.yundama.com/apidoc

print(‘>>>正在初始化…’)

YDMApi = windll.LoadLibrary(‘yundamaAPI’)

# 1. http://www.yundama.com/index/reg/developer 注册开发者账

# 2. http://www.yundama.com/developer/myapp 添加新软件

# 3. 使用添加的软件ID和密钥进行开发,享受丰厚分成

appId = 1 # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!

appKey = b’22cc5376925e9387a23cf797cb9ba745′ # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!

print(‘软件ID:%drn软件密钥:%s’ % (appId, appKey))

# 注意这里是普通会员账 ,不是开发者账 ,注册地址 http://www.yundama.com/index/reg/user

# 开发者可以联系客服领取免费调试题分

username = b’test’

password = b’test’

if username == b’test’:

exit(‘rn>>>请先设置用户名密码’)

####################### 一键识别函数 YDM_EasyDecodeByPath #######################

print(‘rn>>>正在一键识别…’)

# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html

codetype = 1004

# 分配30个字节存放识别结果

result = c_char_p(b” “)

# 识别超时时间 单位:秒

timeout = 60

# 验证码文件路径

filename = b’getimage.jpg’

# 一键识别函数,无需调用 YDM_SetAppInfo 和 YDM_Login,适合脚本调用

captchaId = YDMApi.YDM_EasyDecodeByPath(username, password, appId, appKey, filename, codetype, timeout, result)

print(“一键识别:验证码ID:%d,识别结果:%s” % (captchaId, result.value))

################################################################################

########################## 普通识别函数 YDM_DecodeByPath #########################

print(‘rn>>>正在登陆…’)

# 第一步:初始化云打码,只需调用一次即可

YDMApi.YDM_SetAppInfo(appId, appKey)

# 第二步:登陆云打码账 ,只需调用一次即可

uid = YDMApi.YDM_Login(username, password)

if uid > 0:

print(‘>>>正在获取余额…’)

# 查询账 余额,按需要调用

balance = YDMApi.YDM_GetBalance(username, password)

print(‘登陆成功,用户名:%s,剩余题分:%d’ % (username, balance))

print(‘rn>>>正在普通识别…’)

# 第三步:开始识别

# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html

codetype = 1004

# 分配30个字节存放识别结果

result = c_char_p(b” “)

# 验证码文件路径

filename = b’getimage.jpg’

# 普通识别函数,需先调用 YDM_SetAppInfo 和 YDM_Login 初始化

captchaId = YDMApi.YDM_DecodeByPath(filename, codetype, result)

print(“普通识别:验证码ID:%d,识别结果:%s” % (captchaId, result.value))

else:

print(‘登陆失败,错误代码:%d’ % uid)

################################################################################

print(‘rn>>>错误代码请查询 http://www.yundama.com/apidoc/YDM_ErrorCode.html’)

input(‘rn测试完成,按回车键结束…’)

调用方法很简单,先加载dll库,然后调用一键识别函数即可,这段代码看起来很杂乱,我封装成函数以便调用,下面是我封装好的函数,删除了源码中普通识别函数的调用:

from ctypes import *

def ydm_func(ydm_appid, ydm_appkey, ydm_username, ydm_password, filename, captcha_type):

“””

封装的云打码函数

“””

YDMApi = windll.LoadLibrary(‘yundamaAPI-x64’)

# 查询所有类型 http://www.yundama.com/price.html

# 分配30个字节存放识别结果

result = c_char_p(b” “)

timeout = 10

captchaId = YDMApi.YDM_EasyDecodeByPath(ydm_username, ydm_password, ydm_appid, ydm_appkey, filename, captcha_type,

timeout, result)

print(“一键识别:验证码ID:%d,识别结果:%s” % (captchaId, result.value))

return result.value

我的系统是64位的,故选择加载yundamaAPI-x64.dll这个库,识别完成返回验证码字符串。

使用示例如下,YDM_APPID,YDM_APPKEY,YDM_USERNAME,YDM_PASSWROD可以写入配置文件,方便管理。

qr = ydm_func(YDM_APPID, YDM_APPKEY, YDM_USERNAME, YDM_PASSWORD, b’captcha.png’,1004)

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫验证码处理208347 人正在系统学习中 相关资源:PHP寄生虫繁殖劫持程序V3.0_寄生虫程序-PHP代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月2日
下一篇 2021年1月2日

相关推荐