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

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

本文的目标站点选择了我们都很熟悉的腾讯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 UserAgent reload(sys) ('utf-8') ip_list=j(open('valid_i;)) #代理IP池 def generateRandomUA(num=100): ''' 生成随机的 User-Agent 字符串(使用第三方海量ua库) ''' agent_list=[] user_agent=UserAgent() for i in range(num): one_agent=u agen(one_agent) return agent_list def getPageHtml(url,header,proxy,num_retries=3): ''' 多代理形式、超时重试机制,获取数据 ''' try: response=reque(url,headers=header,proxies=proxy,timeout=5) return response except Exception,e: (3,8)) while num_retries: num_retries-=1 print('Left tring number is: ', num_retries) return getPageHtml(url,header,proxy,num_retries) def getVCPics(img_url,start,end,saveDir): ''' 下载验证码数据 ''' if not os.(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') ) () (1,4)) except: pass if __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验证码很好地实现了这个目标。其次,原始图像数据中不同字符的位置,间距极不规律,在一般的验证码识别工作中,往往要对原始的验证码数据进行切割处理,最终的识别是基于单个字符进行的,但是由于位置、倾斜、间距等因素的存在,导致了字符切割难度的增大,这些都给验证码的识别工作带来的影响。

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

1.《qq手机号登录验证码怎么办看这里!python实现QQ登陆验证码数据采集》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《qq手机号登录验证码怎么办看这里!python实现QQ登陆验证码数据采集》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2986064.html