本文主要介绍利用python网络爬虫发送短信验证码的方法。通过示例代码进行了非常详细的介绍,对于大家的学习或者工作都有一定的参考价值。有需要的朋友下面跟边肖学习。
今天我想总结一下如何用程序实现短信发送功能。但是,我们可能需要调用一些api接口,我会详细描述。我自己学的,怕忘了,所以想总结一下,让写博客成为一种坚持的信念。事不宜迟,我们开始吧!
网络爬虫实现发送短信验证码。
在实现我们的目标的功能之前,我们应该有自己的想法。不然没有方向怎么实现自己的代码功能?
如果我们想要发送短信,那么我们实际上需要分析它们。我们可以分析一个可以发短信的网站页面。
我们如下来到这里:
如你所见,这是一个注册界面。当我们注册时,我们将被要求填写手机号码。其实还有一栏验证码识别。如果是这里开的,那你可以填几个号,发一下,刷新几次。就是这样。
我就填自己的号,不给别人添麻烦。
刷新会出现很多次,但是要填不同的手机号。你知道,我们希望看到这个带有验证码的界面。
我们打开chrome谷歌抓取工具,也就是邮件查收。直接点网络抢包吧。记得在抓取包之前清除下面出现的所有包。我们需要点击验证码,让网页响应,然后同步抢包。
我们在填写手机号的时候,只需点击验证码,然后如下图抢包
不是,其实点击同步的瞬间只有一个数据包。当你做其他动作的时候,可能会出现其他数据包,但是和它没有关系。
我们点进去看看吧。
让我们看看这个网址
https://UC . credit card . ecitic . com/citic card/ucweb/new valicode . do?时间=1613969346256
让我们打开这个网址,看看庐山真面目。
观察这个时间参数,很明显是一个时间戳参数。
时间戳是什么概念?这里有必要介绍一下。
时间戳:格林威治时间1970年1月0: 00: 00。迄今为止
第二时间戳:10位数字。
毫秒时间戳:13位数字。
微秒时间戳:16位数字
可以看到这个时间参数属于毫秒时间戳。
当我们访问这个会议时,每次刷新都会有不同的验证码,并返回当前时间。如果我们想获得当前的验证码,我们需要网址。前面的参数都是一样的,只有时间,我们需要得到时间。如何获得?
python中有一个时间库,我们导入看看怎么用。
下面是一些内联代码片段。
导入时间
def获取时间() :
“获取当前时间戳”
now _ time=str(int(time . time()* 1000))#获取毫秒时间戳
打印(“当前时间戳”,now_time)
现在返回_时间
获取时间()
看运行结果。
我们现在可以这样做。
通过将获得的时间戳参数添加到url中,可以实现动态获取。每次我们想要获取这个二维码,都需要指定当前时间time参数,这样就可以构造这个url了。我们使用一个变量来接收获得的时间戳,然后以字符串的形式将其添加到时间中。
下面是一些内联代码片段。
导入时间
def获取时间() :
“获取当前时间戳”
now _ time=str(int(time . time()* 1000))#获取毫秒时间戳
打印(“当前时间戳”,now_time)
现在返回_时间
time_one=get_time()
img _ URL=' https://UC . credit card . ecitic . com/citic card/ucweb/new valicode . do?time=' time_one
打印(img_url)
让我们看看我们是否能得到正确的网址。
让我们点击蓝色链接,看看我们是否可以得到这个验证码图片。
试验证明我们是完全正确的。
下一步是访问代码,获取并保存验证码。为什么要保存?我们应该了解这些知识。
看看这三个提交栏。很明显是他们提交了表格。提交需要Post,post请求是提交我们的资料,手机号,图形验证码。
当我们提交数据时,我们会在手机上收到短信验证码。这样就可以实现发送短信验证码的功能。
还是把图片验证码存起来吧。
下面是一些内联代码片段。
导入时间
导入请求
def获取时间() :
“获取当前时间戳”
now _ time=str(int(time . time()* 1000))#获取毫秒时间戳
打印(“当前时间戳”,now_time)
现在返回_时间
time_one=get_time()
img _ URL=' https://UC . credit card . ecitic . com/citic card/ucweb/new valicode . do?time=' time_one
打印(img_url)
标题={
用户代理':' Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/88 . 0 . 4324 . 150 Safari/537.36 '
}
response=requests . get(URL=img _ URL,headers=headers)
img_data=response.content
使用open('yzm.jpg ',mode='wb ')作为文件:
file.write(img_data)
您可以看到保存的图像出现在代码编辑器的右侧。
接下来我们继续分析这个手机号的数据和图片验证码的数据是从哪里传过来的,是如何实现的。
我们输入一个手机号,然后输入图片验证码,然后点击就可以免费获取了。这时候再抢包,抢包的方法和上面第一次一样。
看看会出现什么样的包包吧。
蓝色部分是我们要找的目标包。那我们怎么做?单击查看相应的代码。
没有post请求,因为应该提交表单数据。让我们看看下面的表单数据。
在这里,你会发现电话号码是直拨号码,需要办理图片验证码。因为上面我们保存的验证码是图片,你怎么识别这个图片验证码的数据量来进行传入呢?我们这里也需要一个网站。
超级鹰是用来识别验证码的。其实我们还是把这个接口叫做。
我们点击开发文档,用Python写代码。于是我们点击python的图标,来到这里,看看我们需要什么。
找到下面的超级鹰图像识别,然后点击下载。将api接口的py文件导入到您的python编辑器中。我在皮查姆写的。所以将提取的Python文件直接拖到pycharm中。
这是里面的部分代码。
里面有一些小改动。让我们直接看看这段代码是怎么说的。
我来告诉你,原代码有问题。是很低级的问题。
#!/usr/bin/env python
#编码:utf-8
导入请求
从hashlib导入md5
类Chaojiying_Client(对象):
def __init__(自身,用户名,密码,软id):
self.username=用户名
password=password.encode('utf8 ')
self.password=md5(密码)。hexdigest()
self.soft_id=soft_id
self.base_params={
' user': self.username,
' pass2 ':自身密码,
' softid': self.soft_id,
}
self.headers={
连接':'保持活动',
用户代理“:”Mozilla/4.0(兼容;MSIE 8.0Windows NT 5.1三叉戟/4.0)',
}
def PostPic(self,im,codetype):
'''
Im:图片字节
代码类型:参考http://www.chaojiying.com/price.html的标题类型。
'''
params={
' codetype ':代码类型,
}
参数更新(self.base_params)
files={'userfile': ('ccc.jpg ',im)}
r=requests . post(' http://Upload . chaoji ying . net/Upload/processing . PHP ',data=params,files=files,headers=self.headers)
return r.json()
定义报告错误(self,im_id):
'''
Im_ID:错误标题的图片ID。
'''
params={
' id': im_id,
}
参数更新(self.base_params)
r=requests . post(' http://Upload . chaoji ying . net/Upload/report error . PHP ',data=params,headers=self.headers)
return r.json()
if __name__=='__main__ ':
chaoji ying=chaoji ying _ Client(' Super Eagle用户名',' Super Eagle用户名密码',' 96001')#用户中心软件ID生成替换96001
Im=open('a.jpg ',' rb ')。read()#替换a.jpg的本地图像文件路径。有时WIN系统需要//
PrintChaojiying。Postpic (IM,1902) # 1902验证码类型官网价格系统3.4版打印后要加()。
这是他最初的界面代码。太离谱了。分块分析。
def __init__(自身,用户名,密码,软id):
self.username=用户名
password=password . encode(' UTF8 ')#不缩进
self.password=md5(密码)。hexdigest()
self.soft_id=soft_id
.
.
这个错误在哪里?我让它在这里脱颖而出。上面的原始代码直接触及这里并不突出,但是用编辑器打开它会有问题。
if __name__=='__main__ ':
chaoji ying=chaoji ying _ Client(' Super Eagle用户名',' Super Eagle用户名密码',' 96001')#用户中心软件ID生成替换96001
Im=open('a.jpg ',' rb ')。read()#替换a.jpg的本地图像文件路径。有时WIN系统需要//
打印朝吉英。Postpic (IM,1902) # print without () #1902验证码类型官网价格系统3。#4版本()应在打印后添加。
还有一点,这里代码格式写的不对。我在这里指出,读者应该能找到。介意的读者可以去平台下载这个界面,自己修改。
好了,不谈这个了,继续。让我们修改一些代码。
定义报告错误(self,im_id):
'''
Im_ID:错误标题的图片ID。
'''
params={
' id': im_id,
}
参数更新(self.base_params)
r=requests . post(' http://Upload . chaoji ying . net/Upload/report error . PHP ',data=params,headers=self.headers)
return r.json()
if __name__=='__main__ ':
chaoji ying=chaoji ying _ Client(' Super Eagle用户名',' Super Eagle用户名密码',' 96001')#用户中心软件ID生成替换96001
Im=open('a.jpg ',' rb ')。read()#替换a.jpg的本地图像文件路径。有时WIN系统需要//
PrintChaojiying。Postpic (IM,1902) #这是原码#1902验证码类型官网价格系统3.4版打印后添加的()。
我们可以在这个里面写一个方法,以后要调用这个代码接口的时候直接调用这个方法。
请注意,当我们将这样一部分代码添加到类中时,我们编写了一个方法。
定义运行(自身):
chaojiying=Chaojiying_Client(常量。用户名,常量。密码,
93137) #用户中心软件ID生成替换96001
Im=open ('yzm.jpg ',' rb ')。read () #替换a.jpg的本地图像文件路径。有时WIN系统需要//
Result=chaojiying.postpic (im,1004) # 1902验证码类型官网价格系统3.4版打印后要加()。
返回结果['pic_str']
注意这个接口代码,里面包含了chaoji ying=chaoji ying _ client(constant . user _ name,constant.password,913137)。
其实评论里说的很清楚了。这里的constant代表我们要导入的py文件,它包含您的用户名、密码和软件id。
Im=open ('yzm.jpg ',' rb ')。read()打开您保存的验证码文件,我们已经保存了该文件。
Result=chaojiying.postpic (im,1004) 1004代表你的验证码类型。
用户名和密码。你需要注册。那么如何确定软件id和验证码类型呢?
这是主页,请点击价格系统。
下面你可以判断你的验证码类型。
我们需要在这里登录用户中心。
进入如下界面
下拉进入软件id
进入后点击生成一个软件id,软件名称和软件描述可以随便填写。
这样,我们就可以得到一个软件id。
这个常数怎么写很简单。创建一个py文件并写入其中。
用户名=' …'
密码='…'
那就省省吧。将py文件导入到当前路径,然后导入。
现在让我们看看完整的代码。
完成接口的修改代码
导入请求
从hashlib导入md5
导入常数
导入常数
类Chaojiying_Client(对象):
def __init__(自身,用户名,密码,软id):
self.username=用户名
self . password=MD5(password . encode(' utf8 '))。hexdigest()
self.soft_id=soft_id
self.base_params={
' user': self.username,
“通道2”:自身密码,
' softid': self.soft_id,
}
self.headers={
连接':'保持活动,
用户代理":" Mozilla/4.0(兼容;MSIE 8.0Windows NT 5.1三叉戟/4.0)',
}
def PostPic(self,im,codetype):
'''
即时消息:图片字节
代码类型:题目类型参考http://www.chaojiying.com/price.html
'''
params={
代码类型':代码类型,
}
参数更新(self.base_params)
files={'userfile': ('ccc.jpg ',im)}
r=请求。帖子(' http://上传。朝吉英。net/上传/处理。' PHP ',数据=参数,文件=文件,
头=self .头)
return r.json()
定义报告错误(self,im_id):
'''
即时消息id:报错题目的图片身份证明
'''
params={
' id': im_id,
}
参数更新(self.base_params)
r=请求。帖子(' http://上传。朝吉英。net/上传/报告错误。' PHP ',data=params,headers=self.headers)
return r.json()
定义运行(自身):
chaojiying=Chaojiying_Client(常量。用户名,常量。密码,
913137) # 用户中心软件身份证明生成一个替换96001
im=open('yzm.jpg ',' rb ').read() #本地图片文件路径来替换a.jpg有时胜利系统须要//
结果=超基英。邮政编码(im,1004) # 1902验证码类型官方网站价格体系3.4 版打印后要加()
返回结果['pic_str']
if __name__=='__main__ ':
chaojiying=Chaojiying_Client(常量。用户名,常量。密码,913137) #用户中心软件身份证明生成一个替换96001
im=open('yzm.jpg ',' rb ').read() #本地图片文件路径来替换a.jpg有时胜利系统须要//
结果=超基英。海报(即时消息,1004)
打印(超基英。邮政编码(im,1004))# 1902验证码类型官方网站价格体系3.4 版打印后要加()
主文件代码,从这里执行
导入时间
导入请求
从抄收营导入抄收营_客户端
导入常数
极好的获取时间() :
' 获取当前的时间戳'
now _ time=str(int(time。时间()* 1000))#获取毫秒级的时间戳
打印('当前的时间戳,现在_时间)
现在返回_时间
time_one=get_time()
img _ URL=' https://UC。信用卡。特别的。com/中信卡/ucweb/新valicode。做什么?time=' time_one
打印(img_url)
标题={
用户代理:' Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/88。0 .4324 .150 Safari/537.36英尺
}
响应=请求。get(URL=img _ URL,headers=headers)
img_data=response.content
使用打开(' yzm.jpg ',mode='wb ')作为文件:
file.write(img_data)
打印(响应)
#验证码识别
code=Chaojiying_Client(常量。用户名,常量。密码,913137)。运行()
打印('识别出来的验证码为,代码)
#请求保证同一个用户
cookiejar=response.cookies
cookies=cookiejar.get_dict()
打印(饼干)
数据={
'电话':19745678397
“imgValidCode”:代码,
}
time_two=get_time()
code _ URL='https://uc.creditcard.ecitic.com/citiccard/ucweb/getsms.do?时间戳"时间_ 2"
requests _ two=请求。post(URL=code _ URL,data=data,headers=headers,cookies=cookies)
打印(requests_two.json())
我们来看运行结果
好吧,短信发送成功
需要注意的是,如果你发送多次的话,那么会出现提醒你短信发送频率过高的提示。这是服务器的响应。
我们总结一下该程序实现了发送验证码的功能,如果你需要实现发送你想要的文本,那么你需要调用其它的接口。别的就不多说了,毕竟爬虫也需要讲武德。
到此这篇关于大蟒网络爬虫实现发送短信验证码的方法的文章就介绍到这了,更多相关大蟒爬虫发送短信验证码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。