网页抓取qq(Chrome谷歌浏览器一款接口调试工具下载(组图))
优采云 发布时间: 2022-02-10 14:01网页抓取qq(Chrome谷歌浏览器一款接口调试工具下载(组图))
2020/04/02 - 粉色小白 - 转载转发请注明出处
最近很无聊,所以在QQ专区做了一个抓包分析。
在开始工作之前我们需要准备的工具有:
工具名称 备注 内容下载链接
铬合金
谷歌浏览器,这里我们用来抓包
•点击下载
邮差
一个接口调试工具
•点击下载
Python3
需要请求和 PIL 库
•点击下载
VSCode
你也可以使用 PyCharm
•点击下载
首先我们打开QQ空间网页版
QQ空间
然后我们打开F12调试,点击网络,找到二维码的来源
获取二维码的接口(ptqrshow)地址为:
https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=4&t=0.17442452440865464&daid=5&pt_3rd_aid=0
复制代码
多次获取地址并分析后发现:
在写代码之前,我们先导入一些第一部分必须用到的库,代码如下
#若没安装该库则使用pip安装
from PIL import Image # 图片处理
import requests # 发送网络请求
import time # 时间库
import random # 随机数
import json # json库,用来格式化
复制代码
获取参数&t的代码如下
def t():
return str(random.random())
复制代码
接下来我们将获取二维码的过程封装成一个函数
def getQRC(): # 获取二维码
url = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=4&t=' + t() + '&daid=5&pt_3rd_aid=0'
res = requests.get(url)
with open('QRC.png', 'wb') as f:
f.write(res.content)
Image.open('QRC.png').show() # 打开二维码图片
return res.headers # 将请求结果返回,后面会用到
复制代码
我们拿到二维码接口地址后,我们看看它是如何通过扫描验证码登录的
通过Network,我们可以很容易的发现,它会定期向同一个接口发送请求。经过分析,我们知道这个接口是用来判断用户是否扫码,然后登录的。
接口(ptqrlogin)地址如下:
https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptqrtoken=1889434358&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-1585807008960&js_ver=20032614&js_type=1&login_sig=jhMZlTwCdTy5do0qJy2b2cRJocoxd-rzRYpb9-LszY8DCDM0WJtbcYicUjiNKGI3&pt_uistyle=40&aid=549000912&daid=5&
复制代码
经过多次对比分析,发现我们需要用到的参数有:
&login_sig
参数内容需要从如下接口头部的Set-Cookie中获取,参数内容由64位数字、字母和符号“-”组成
接口(xlogin)地址如下:
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https://qzs.qzone.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=手机QQ空间&pt_qr_link=http://z.qzone.com/download.html&self_regurl=https://qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http://z.qzone.com/download.html&pt_no_auth=1
复制代码
接下来我们调用接口(xlogin)后,在头部的Set-Cookie中找到参数&login_sig
根据以上需求,我们可以将获取参数&login_sig的操作过程封装成一个函数(如下),方便我们后面调用
def getLoginSig():
url = 'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https://qzs.qzone.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=手机QQ空间&pt_qr_link=http://z.qzone.com/download.html&self_regurl=https://qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http://z.qzone.com/download.html&pt_no_auth=1'
headers = requests.get(url).headers
start_index = headers['Set-Cookie'].find('pt_login_sig=') + 13
return headers['Set-Cookie'][start_index:start_index + 64]
复制代码
&ptqrtoken
这个参数的内容需要从获取二维码的界面(ptqrshow)的header中获取,因为不同的二维码这个参数的值是不同的,所以我们获取二维码的时候保存在第一个step ,需要返回获取参数&ptqrtoken的header。从获取二维码的接口(ptqrshow)的抓包信息中,一个名为&qrsig的参数符合我们的要求
所以我们把获取参数&ptqrtoken的过程封装成一个函数
<p>def getQRCSig(headers): # 将获取二维码接口的headers传进来
return ptqrtoken(headers['Set-Cookie'].split(';')[0][6:])
def ptqrtoken(value): # 构造ptqrttoken的加密方式
i = 0
e = 0
n = len(value)
for i in range(n):
e = e + (e