python实现QQ登陆验证码数据采集

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

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

       本文的目标站点选择了我们都很熟悉的腾讯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)
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.random
        agent_list.append(one_agent)
    return agent_list



def getPageHtml(url,header,proxy,num_retries=3):
    '''
    多代理形式、超时重试机制,获取数据
    '''
    try:
        response=requests.get(url,headers=header,proxies=proxy,timeout=5)
        return response
    except Exception,e:
         time.sleep(random.randint(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.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:
            pass


if __name__ == '__main__':
    print('captchaDataCollection!!!')
    url="http://captcha.qq.com/getimage?aid=1007901&r=0.38687027756482356"
    #验证码数据采集
    getVCPics(url,0,200,'QQ/')

        我们暂时获取了200张图像数据,我在每次获取后都加入了一个随机休眠时间,做人要厚道不是嘛,别把人家网站搞得太累了呀是不是。

        程序运行输出截图如下:

python实现QQ登陆验证码数据采集

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

python实现QQ登陆验证码数据采集

      今天到这里就先暂时告一段落了!