Python使用网络抓包的方式,利用超级鹰平台识别验证码登录,《爬取古诗文网》。
上篇–识别验证码
序言:
哈喽,各位小可爱们,我又来了,这次我新学习到的内容是python爬虫识别验证码。我这次用的是网络抓包工具来爬取,就是直接使用Requests模块进行抓取数据,除此之外还需要借助超级鹰平台进行验证码识别。
废话不多说,直接上代码:
import time
import requests
from chaojiying import Chaojiying_Client
time1=str(int(time.time()*1000))
url="https://so.gushiwen.cn/RandCode.ashx?"
f_url=url+time1
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"}
params={"t":time1}
response=requests.get(url=url,headers=headers,params=params)
img=response.content
with open("img.jpg","wb") as f:
f.write(img)
chaojiying = Chaojiying_Client('用户名', '密码', '软件id') #用户中心>>软件ID 生成一个替换 96001
im = open('img.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print("识别结果:",chaojiying.PostPic(im, 1902)["pic_str"])
上面是全部代码,接下来就由我为大家进行详细地讲解…
1.导入相关模块
在这里我们需要调用的模块有time,requests,以及从本地文件中调取chaojiying相关类。
import time
import requests
from chaojiying import Chaojiying_Client
time1=str(int(time.time()*1000)) #导入相关模块
1.time是用来计算时间戳(关于时间戳的解释)的,以及time的具体用法。在这里我们主要用的是time.time()方法,来返回一个时间戳。
2.requests模块模拟浏览器发送请求,具体用到get方法,在我的爬取彼岸图网的这篇文章中已经解释了为什么用get方法而不是post方法。
3.从本地文件中引入相关模块。
2.利用网络抓包工具抓取url,并发起请求
首先,我们打开古诗文网,点击“我的”,进入登陆页面,明确我们此次的目的是识别验证码。

然后,打开我们的抓包工具,就是点击鼠标右键,会出现“检查”选项,点击“检查”,进入抓取界面。附图:
这是我们打开抓包界面之后的出现的界面:
点击验证码,查看抓包界面中的”network"或者是“网络”选项,之后会出现一张图片的链接(图片的格式一般是jpg或者gif):
再点击它,出现:
1.我们用到的具体信息就是红线圈出的部分。查看“请求URL”中的upl信息,我们可以发现问号之后的url信息就是我们上面列的第二张图的“t”!
2.再看一下发现,这是get请求。
3.“t”的信息是什么?我们了解到验证码它随时更换的,假如你在一段时间不输入验证码,就算有这个验证码,服务器也会给你报错“验证码错误”。所以我们猜想,“t”或许跟时间戳有关。
4.我们验证一下发现“t”就是时间戳*1000,再去掉小数位!!
所以就有了下面的代码:
time1=str(int(time.time()*1000))#将时间戳转化为params参数中的 “t”
url="https://so.gushiwen.cn/RandCode.ashx?"
f_url=url+time1 #验证码图片的url,运用到了字符串的拼接
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70"}#UA伪装
params={"t":time1}
response=requests.get(url=url,headers=headers,params=params) #get方法发起请求
3.获取响应数据,并保存到本地
为什么要保存数据呢?
因为超级鹰平台有一个写好的文件里需要用到“这个文件路径”。超级鹰文件部分代码如下:
if __name__ == '__main__':
chaojiying = Chaojiying_Client('用户名', '用户密码', '软件id') #用户中心>>软件ID 生成一个替换 96001
im = open('文件路径', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print (chaojiying.PostPic(im, 文件类型)) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
保存数据的代码如下:
img=response.content #将数据转化成二进制字节流
with open("img.jpg","wb") as f:
f.write(img) #with open方法
4.导入chaojiying文件相关模块,获取验证码信息
chaojiying = Chaojiying_Client('c1234567', 'Wasd11314788', '919951') #用户中心>>软件ID 生成一个替换 96001
im = open('img.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print("识别结果:",chaojiying.PostPic(im, 1902)["pic_str"] #获取验证码)
超级鹰获取的验证码信息在“chaojiying.PostPic(im,1902)”这个字典里,要想访问字典的值,就需输入字典的键。
好啦,今天的内容就到此结束了,谢谢你的阅读!!!如果觉得还行,就点个小小的赞吧!
文 | 戴眼镜的it小孩纸