百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python实现QQ登陆验证码数据采集(python实验室腾讯扣叮)

cac55 2024-10-04 13:35 33 浏览 0 评论

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

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

本文的目标站点选择了我们都很熟悉的腾讯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/')

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

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

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

程序运行输出截图如下:

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

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

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

相关推荐

小车五位自动循环往返控制_小车自动往返控制系统

需求描述:用三相异步电动机拖动一辆小车在A、B、C、D、E五点之间自动循环往返运行,小车初始在A点,按下启动按钮,小车依次前进到B、C、D、E点,并分别停止2s返回到A点停止。按下停止...

自动灌溉系统_自动灌溉系统by

需求描述:PLC时钟设定每日6:00、18:00自动启动灌溉系统,每次运行15分钟后停止;非定时时段按下手动灌溉按钮,立即启动并运行15分钟;土壤湿度传感器检测到湿润时,跳过本次定时灌溉...

主板ERP开启还是关闭好_主板设置erp是什么

主板功能的开启与关闭,本质是在“节能环保”和“使用便利”之间做选择。为帮你快速决策,先给出直接结论,再深入解析原理、影响及操作步骤,让你根据自身需求精准设置。一、直接结论:ERP功能如何选?...

新电脑必做5项设置!做完再玩,流畅安全多用三年

刚拿到新电脑,兴奋之余先别急着开机畅玩!做好以下这5大设置,能让你的爱机长期保持流畅如新,安全又省心。尤其是最后一招,很多老用户都不知道!1关闭隐私常规,杜绝数据偷跑新电脑首次开机进行系统初始化时,...

属于 PHP 开发者的 Supervisor 实用指南

属于PHP开发者的Supervisor实用指南在PHP开发中,我们经常需要运行一些后台进程:队列处理、长时间运行的脚本、WebSocket服务器等。这些进程可能会因为各种原因意外退出,手...

领导半夜12点微信派活?三句高情商回复,反手拿捏让他不敢再烦

友友们大家来啦!今天来和大家一起分享精彩话题老规矩先点赞再看文!0102别在这里害人了,现在能保住工作就烧高香了,再得瑟,明天早上去办离职0304很简单,把他一起拉上,每半小时打电话或语音汇报,一两次...

"零点黑科技!硬盘自动备份+离线神操作,服务器数据安全躺赢"

公司有一台服务器,数据库需要每天零点进行数据库备份,要求在本机备份一次,再在移动硬盘上异地备份一次。备份完成后硬盘自动离线。具体思路如下:数据库自动备份时间为每天0点,备份过程约需1分钟。0点时开启硬...

峰谷电:白天贵、晚上便宜,你家真的适合开通吗?

电费单又超预算了?别急着关掉空调,其实你可能错过了一个"电费打折"的机会——峰谷电。它就像电影院的日场和夜场票,白天贵、晚上便宜,聪明利用,电费真的能省下来。一、峰谷电是什么?峰谷电把...

电脑开机密码设置全指南:从基础到进阶的安全防护

在数字化时代,电脑存储着大量个人隐私和重要数据,设置开机密码是保护信息安全的第一道防线。本文将系统介绍Windows、macOS、Linux三大主流操作系统及BIOS层面的密码设置方法,同时涵盖密码管...

自动喷香机_香薰机自动喷香机

需求描述:PLC时钟设定每日9:00、14:00、18:00自动启动喷雾,每次喷雾3秒后停止;非定时时段按下手动喷雾按钮,立即喷雾3秒;香薰液缺液传感器检测到液位过低时,停止喷雾并亮报警...

macbook系统自动启动项在哪里查看

了解和管理MacBook的开机自动启动项,是优化系统启动速度和运行效率的好方法。下面我来为你介绍几种查看和管理这些启动项的方法。查看和管理MacBook启动项1.通过系统设置(最简单直接的方法)...

想让电脑自己到点开机和关机?这4个超实用的设置方法快收好!

嘿,你是不是也经常忙到忘记关电脑?或者早上想用电脑时发现还没开机?别慌,今天我就跟你分享几个超实用的方法,帮你轻松搞定电脑的定时开关机设置。不管你是电脑小白还是有点基础,这篇教程都能让你秒懂操作,省时...

定时关机这样操作小白也会 一招设定工作日关机 指定时间关机

在日常使用电脑的过程中,我们常常会遇到这样的情况:晚上睡觉前忘记手动关机,导致电脑整夜运行,既浪费电又缩短硬件寿命;或者在下载大文件时,需要等待很长时间才能完成,却不能一直守在电脑前,下载完成后也无法...

日本无线电操作证试题,这些问题你能答的上来吗?

一直以来,我们对于日本的业余无线电的印象都停留在“操作能力强,爱好者数目众多”上,然而我们对于他们的业余无线电体系所知甚少。日本业余无线电操作证的等级分作四级,最基本的四级操作证书具有8MHz以下、2...

你知道吗?单边带信号就像DNA分子一样!

我们在准备B级操作证书的过程中,避免不了的要接触到一个新的名词——SSB。单边带是传统AM模式的一种特殊的形式,在传送相同的信息的过程中,其占用的带宽仅为AM模式的一半,那么SSB模式到底是怎样的一种...

取消回复欢迎 发表评论: