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

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

cac55 2024-10-04 13:35 31 浏览 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验证码很好地实现了这个目标。其次,原始图像数据中不同字符的位置,间距极不规律,在一般的验证码识别工作中,往往要对原始的验证码数据进行切割处理,最终的识别是基于单个字符进行的,但是由于位置、倾斜、间距等因素的存在,导致了字符切割难度的增大,这些都给验证码的识别工作带来的影响。

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

相关推荐

三菱PLC新手必备!20个案例带你打通编程逻辑!!!

在当今自动化蓬勃发展的时代,三菱PLC已然成为众多自动化爱好者和从业者踏入控制领域的首选利器。无论是小型的自动化生产线,还是智能家居系统的搭建,三菱PLC都发挥着举足轻重的作用。在接下来的内容...

一文教你看懂三菱PLC定位指令应用

一动作描述1、分别介绍各个定位指令的使用规则;2、使用定位指令控制伺服步进,(以脉冲加方向的方式);3、M8029应用注意事项。二硬件设备1、三菱PLC:FX3U-32MT;2、步进电机和步进驱...

电气人,三菱Q系列和FX PLC系列之间的区别你都知道吗?

PLC软元件大比拼,Q系列VSFX系列,你的选择是什么?家,对每个人都很重要;爱,也是。对工程师来说,PLC就像他们的家,用代码搭建的爱。今天,咱们说说三菱PLC里的Q系列和FX系列,看看它们软元件...

三菱PLC中定位指令DRVA的使用案例

三菱PLC绝对定位指令DRVA使用案例深度解析:从入门到进阶一、案例引入:伺服电机绝对定位控制用户需求:工厂自动化生产线需要对工件进行精准定位,误差必须控制在极小的范围内。这要求伺服电机能够在特定位...

三菱FX-PLC设计一个通电和断电均延时的梯形图

任务描述设计一个通电和断电均延时的梯形图。当X000由断变通时,延时10S后Y0得电;当X000由通变断时,延时5S后Y000断电。程序#电工交流圈##PLC##三菱PLC##梯形图#...

三菱R系列PLC硬件组态案例2(三菱plc硬件结构图)

概述本例中将详细介绍模拟量输出模块R60DAV8的使用方法硬件组态设置CPU:R04ENCPU(内置RJ71EN71集成一个以太网口和CC-LinkIEField接口)电源:R62P串行模块:RJ...

新手必看:三菱FX PLC输入接线(三菱fx plc教学视频)

导读:对于学习三菱PLC编程的初学者,熟悉和掌握PLC输入接线是必须的。PLC输入接线,根据输入端可以接的元件大致可以分为两线制和三线制。通过下文学习三菱FXPLC的输入接线。一个基本回路需要哪三个...

这几种方法教你三菱PLC如何控制变频器,对比,哪种最适用

变频器是一个执行机构,它的作用就是驱动三相异步电动机,一些高性能的变频器也可以驱动同步电机,甚至增加编码器反馈实现伺服功能。至于如何驱动,就靠PLC控制实现。在工控行业中,PLC与变频器是最常见的一种...

三菱PLC编程实例(三菱plc编程实例大全)

三菱PLC编程实例-正反转电路PLC控制控制要求:通过PLC程序控制实现三相异步电动机的正反转控制(正反转切换不需要进行停止可直接切换),且设备具有过载保护、短路保护。注:切换方向时,正运行方向立即...

三菱plc的数据类型(PLC的基础)(三菱plc常用的型号)

三菱PLC的数据类型根据其软元件和用途可分为以下几类:1.位(Bit)用途:表示开关状态(ON/OFF)。软元件:`X`(输入继电器)、`Y`(输出继电器)、`M`(内部继电器)、`S`(步进继电...

三菱R系PLC高级应用(三菱plc高级编程实例)

三菱R系PLC高级应用一、模块配置1.添加模块打开GXWorks3,新建工程,选择PLC型号。添加CPU,系统提示设置模块。模块标签,用于在程序中使用标签对模块的参数设置和模块的状态读取。样本注...

三菱PLC报警一览表(部分)(三菱plc报警代码手册)

...

三菱PLC特殊功能辅助继电器-分类总结清单

1.FX系列PLC2.Q系列PLC3.A系列PLC关注我,学习更多电气知识!...

[三菱PLC] 三菱FX各系列轴输出和插补说明

三菱FX系列PLC当下常用的有FX3SA、FX3GA、FX3U、FX5U(IQ-F)。这几个系列里对应晶体管型号的主机具备轴定位功能。之前呢,FX3SA、FX3GA、FX3U只能让单轴单独...

三菱PLC的几种类型(常用的三菱plc)

三菱PLC分几种类型,其中这几种要记住三菱PLC分几种类型,今天分享大家分享三菱PLC分几种类型。一、PLC的类型:1、小型PLC一体式结构、I/O点数:256点(384点)多用于单机控制如:FX1...

取消回复欢迎 发表评论: