网页抓取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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线