2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python爬虫学习(七):验证码识别

时间:05-21来源:作者:点击数:46

反爬机制:验证码.识别验证码图片中的数据,用于模拟登陆操作。

识别验证码的操作:

- 人工肉眼识别。(不推荐)

- 第三方自动识别(推荐)

- 云打码:http://www.yundama.com/demo.html

云打码的使用流程:

- 注册:普通和开发者用户

- 登录:

- 普通用户的登录:查询该用户是否还有剩余的题分

- 开发者用户的登录:

- 创建一个软件:我的软件-》添加新软件-》录入软件名称-》提交(软件id和秘钥)

- 下载示例代码:开发文档-》点此下载:云打码接口DLL-》PythonHTTP示例下载

实战:识别古诗文网登录页面中的验证码。

使用打码平台识别验证码的编码流程:

- 将验证码图片进行本地下载

- 调用平台提供的示例代码进行图片数据识别

代码参考:

  • from CodeClass import YDMHttp
  • import requests
  • from lxml import etree
  • #封装识别验证码图片的函数
  • def getCodeText(imgPath,codeType):
  • # 普通用户用户名
  • username = 'username '
  • # 普通用户密码
  • password = 'username '
  • # 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
  • appid = 6003
  • # 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
  • appkey = 'appkey '
  • # 图片文件:即将被识别的验证码图片的路径
  • filename = imgPath
  • # 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
  • codetype = codeType
  • # 超时时间,秒
  • timeout = 20
  • result = None
  • # 检查
  • if (username == 'username'):
  • print('请设置好相关参数再测试')
  • else:
  • # 初始化
  • yundama = YDMHttp(username, password, appid, appkey)
  • # 登陆云打码
  • uid = yundama.login();
  • print('uid: %s' % uid)
  • # 查询余额
  • balance = yundama.balance();
  • print('balance: %s' % balance)
  • # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
  • cid, result = yundama.decode(filename, codetype, timeout);
  • print('cid: %s, result: %s' % (cid, result))
  • return result
  • #1.对验证码图片进行捕获和识别
  • headers = {
  • 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
  • }
  • #https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx
  • #模拟登录:验证码的识别,动态参数的处理,cookie相关的操作处理
  • s = requests.Session()
  • #1.验证码图片爬取到本地进行存储
  • url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx'
  • page_text = s.get(url=url,headers=headers).text
  • tree = etree.HTML(page_text)
  • img_src = 'https://so.gushiwen.org'+tree.xpath('//*[@id="imgCode"]/@src')[0]
  • img_data = s.get(url=img_src,headers=headers).content
  • with open('./gushiwen.jpg','wb') as fp:
  • fp.write(img_data)
  • #解析动态参数
  • __VIEWSTATE = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
  • __VIEWSTATEGENERATOR = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
  • #将验证码图片提交给打码平台进行识别
  • code_text = getCodeText('./gushiwen.jpg',1004)
  • print(code_text)
  • #模拟登录
  • post_url = 'https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx'
  • data = {
  • #前两个参数是动态参数
  • '__VIEWSTATE': __VIEWSTATE,
  • '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
  • 'from': 'http://so.gushiwen.org/user/collect.aspx',
  • 'email': 'www.zhangbowudi@qq.com',
  • 'pwd': 'bobo328410948',
  • 'code': code_text,
  • 'denglu': '登录',
  • }
  • #s表示的session中已经存储了相关的cookie
  • response = s.post(url=post_url,data=data,headers=headers)
  • page_text = response.text
  • print(response.status_code)
  • with open('./gushiwenwang.html','w',encoding='utf-8') as fp:
  • fp.write(page_text)

------------------------------------>

云打码平台已无法访问,可以使用其他第三方平台,方法都是一样的。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门