在很多网站应用中为了防止爬虫或者是一些恶意数据获取行为的发生都会加入验证码这一防范机制,有静态验证码也有动态验证码,有纯数字验证码也有数字字母混合验证码,还有滑动验证码,简直是五花八门的存在。

当然了,正所谓,道高一尺魔高一丈,一系列验证码破解项目诞生了,当然大多数的验证码破解项目都是图像数据处理技术与机器学习或者是深度学习相结合形成的,我们今天先不去扯那么远了,想要做一个验证码识别的项目首先就是要获取到待识别的验证码数据,今天就是先来进行数据的获取。

本文的目标站点选择了我们都很熟悉的腾讯QQ登陆的验证码数据,获取方式很简单,具体实现如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能: 网络验证码数据采集模块
'''import os
import sys
import time
import json
import random
import urllib2
import datetime
import requests
import pandas as pd
from PIL import Image
from selenium import webdriver
from multiprocessing import Process
from fake_useragent import UserAgentreload(sys)
sys.setdefaultencoding('utf-8')
ip_list=json.load(open('valid_ip_all.json'))  #代理IP池def generateRandomUA(num=100):'''生成随机的 User-Agent 字符串(使用第三方海量ua库)'''agent_list=[]user_agent=UserAgent()for i in range(num):one_agent=user_agent.randomagent_list.append(one_agent)return agent_listdef getPageHtml(url,header,proxy,num_retries=3):'''多代理形式、超时重试机制,获取数据'''try:response=requests.get(url,headers=header,proxies=proxy,timeout=5)return responseexcept Exception,e:time.sleep(random.randint(3,8))while num_retries:num_retries-=1print('Left tring number is:  ', num_retries)return getPageHtml(url,header,proxy,num_retries)def getVCPics(img_url,start,end,saveDir):'''下载验证码数据'''if not os.path.exists(saveDir):os.makedirs(saveDir)for i in range(start,end):print("Downloading",i+1,"......")header,proxy=buildProxy()try:img=getPageHtml(img_url,header,proxy,num_retries=3)pic_name=saveDir+str(i+1)+'.jpg'file_pic=open(pic_name,'ab')file_pic.write(img.content)file_pic.close()time.sleep(random.randint(1,4))except:passif __name__ == '__main__':print('captchaDataCollection!!!')url="http://captcha.qq.com/getimage?aid=1007901&r=0.38687027756482356"#验证码数据采集getVCPics(url,0,200,'QQ/')

上述代码中,我们加入了高可用IP代理措施,来避免由于频繁爬取造成的IP被封或者限制的问题,具体的IP代理数据我已经在之前的文章中提及,也上传到了我的资源目录里面,需要的话可以直接拿去使用,效用还是可以的。

getPageHtml(url,header,proxy,num_retries=3)是我们用于采集验证码数据集,考虑到可能出现的IP失效或者是网络请求出错等其他的问题设置的页面超时重传机制,num_retries表示的是默认的超时重传次数,比如:这里在第一次数据请求失败后会休眠随机的时间之后,重新进行请求,直到尝试到最大的重传次数才放弃当次的数据获取工作。这也算是网络数据采集中的一点容错机制吧,毕竟不是每一次网络请求都是正常进行的,总会有一些意外的问题产生,这也是以往数据采集过程中遇上的问题,所以就在这里加入了这样的容错机制。

我们暂时获取了200张图像数据,我在每次获取后都加入了一个随机休眠时间,做人要厚道不是嘛,别把人家网站搞得太累了呀是不是。数据的下载还是很快的,每一个验证码数据的下载本质上就是执行了一次get操作,然后将网站的响应结果保存本地就行了,速度还是很快的,但是不要为了过快的速度去设置很小的时间间隔,这样对人家网站正常的负载影响还是会挺大的,毕竟只是为了练习技术的,没必要不太道德。此外,本文只是出于研究的目的来进行的实验工作,不要用于其他的用途,造成不必要的麻烦,几百张的数据量对于我们简单的研究和分析来说肯定是足够了,如果后面需要做深度学习模型来进行验证码的识别的话就需要考虑使用小批量数据来进行数据增强处理,而不是一味地盲目去大批量进行数据采集。

程序运行输出截图如下:

采集到的图像数据截图如下:

从上面的结果整体来看:基于QQ验证码数据的完全识别难度还是比较大的。首先:这里原始字符数据的倾向、形变、叠压程度还是比较大的,而且验证码都是RGB图像,且还是空心图像,这样经过灰度化处理之后就连人都不好去识别了,毕竟验证码的本质目的就是【让人很容易识别出来,让机器很难识别出来】,可以说:QQ验证码很好地实现了这个目标。其次,原始图像数据中不同字符的位置,间距极不规律,在一般的验证码识别工作中,往往要对原始的验证码数据进行切割处理,最终的识别是基于单个字符进行的,但是由于位置、倾斜、间距等因素的存在,导致了字符切割难度的增大,这些都给验证码的识别工作带来的影响。

不过,验证码识别不是今天本文的研究内容,之后有时间的话再去看看怎么才能更好地识别出来验证码数据吧,今天的实践内筒到这里就先暂时告一段落了!记录一下!

python实现QQ登陆验证码数据采集相关推荐

  1. html手机qq登陆验证码,为什么qq登陆需要验证码?qq登陆需要验证码怎么取消?...

    为什么qq登陆需要验证码?qq登陆需要验证码怎么取消?很多用户在登陆qq时,总是需要输入验证码,一些用户表示很烦,那么大家知道为什么qq登陆需要验证码吗?如果不想每次登陆qq都需要验证码该如何取消呢? ...

  2. python 使用qq登陆搜狗微信搜索

    为什么80%的码农都做不了架构师?>>>    本博文只提供登陆的过程,不提供具体的代码,如果需要源码的请联系qq 516750653. 首先你应该对常见的加密算法比较了解,知道即可 ...

  3. qq登陆inc.php,登陆验证 qq登陆验证 php 登陆验证

    用户登录验证脚本,Chkpwd.asp '=======用户登录验证脚本======= '如果尚未定义Passed对象,则将其定义为false,表示没有通过验证 If IsEmpty(Session( ...

  4. python自动登录qq邮箱_selenium+python实现自动登陆QQ邮箱并发送邮件功能

    本期做一个selenium详细实例,会把我在元素定位中遇到的一些阻塞和经验分享给大家. (浏览器为Chrome) (如果只需要最终的完整代码,请直接跳转到文章最后) 浏览器打开QQ邮箱登录网址 fro ...

  5. 基于python的QQ第三方登陆实现工具类

    基于python的QQ第三方登陆 在做第三方登陆时,一共有如下的步骤 首先我们要获取QQ服务器的登陆地址 用户进行登陆 QQ服务器返回用户的对应code给前端 前端将用户code传输到后端 服务器获取 ...

  6. python基础编程:selenium+python实现自动登陆QQ邮箱并发送邮件功能

    本期做一个selenium详细实例,会把我在元素定位中遇到的一些阻塞和经验分享给大家. (浏览器为Chrome) (如果只需要最终的完整代码,请直接跳转到文章最后) 浏览器打开QQ邮箱登录网址 QQ邮 ...

  7. Python实现点选验证码识别, B站模拟登陆

    话不多说,今天就分享一下如何用Python实现点选验证码识别,小破站模拟登陆 开发环境 Python 3.8 Pycharm 2021.2 谷歌浏览器 谷歌驱动 模块使用 selenium >& ...

  8. 十一、实现QQ登陆(第三方的登陆)(用户部分)

    1.开发者通过以下几个步骤,即可接入互联开放平台:注册开发者→创建应用→通过审核并获取接口权限 2.QQ登录OAuth2.0总体处理流程 Step1:申请接入,获取appid和apikey: Step ...

  9. python实现qq登录_python实现QQ批量登录功能

    本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...

  10. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

最新文章

  1. Logback日志配置(分级别输出到不同文件)
  2. sql server 小记——分区表(上)
  3. 使用AFNetworking请求新浪微博数据接口出错解决办法
  4. Web APi之EntityFramework【CRUD】(三)
  5. Linux内核启动流程分析(一)【转】
  6. 再谈VC++中ListControl排序[原创]
  7. halcon学习笔记——(4)HDevelop language(结构语句)
  8. 应该如何理解mobx_如何使用mobx观察observable数组上的object.property更改
  9. ansys 命令流基础—— 点线面体基本操作
  10. NTC热敏电阻阻值-温度对照表
  11. JAVA解析RTF 文件
  12. Exce批量发送邮件功能:发件人设置的操作
  13. mp4 html5 自动播放,网页自动播放视频(mp4)
  14. 关于过去分词做形容词、any后接单复数、带疑问词的不定式作后置定语
  15. 用GZIPOutputStream流压缩出现H4sIAAAAAAAAAA==
  16. 使用 yarn 安装时,报错node_modules\node sass:Command failed.
  17. 九十年前到江西(2009-06-09)
  18. 彻底的理解:WebService到底是什么?
  19. JAVA学习笔记(三) 实现类
  20. javascript ==等于与===恒等于

热门文章

  1. MySQL的快速修复
  2. 50个技巧提高你的PHP网站程序执行效率
  3. eclipse实用编辑快捷键
  4. 字符串部分函数的实现
  5. 重写ArrayAdapter
  6. Noip2011提高组 聪明的质监员
  7. Unity多个场景叠加或大场景处理方法小结
  8. SharePoint2010 空白站点集无法找到术语管理库
  9. sqlserver2008的数据库自动备份方法(转载)
  10. ASP.NET教程4