使用Python爬取快手视频与评论(App与Web端分析)

news2024/11/19 1:47:43

文章目录

  • 1. APP端抓包配置
  • 2. APP端抓包分析
  • 3. Web端抓包分析
  • 4. 爬虫代码实现

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

在这里插入图片描述

1. APP端抓包配置

  在开始抓包配置之前相关的配置操作,可以看我之前的文章:某软件商店app抓包分析,这次咱们用postern来做转发,ssl证书配置移步上面文章查看,手机保证已经root,同时把frida server服务拉起来,首先设置代理配置,如下所示:

在这里插入图片描述

再设置规则配置,如下所示:

在这里插入图片描述

Hook 脚本如下所示:

Java.perform(function () {
    var ll = Java.use('com.kuaishou.aegon.Aegon');
    ll.nativeUpdateConfig.implementation = function (a, b) {
        console.log(`原参数a ---> ${a}`)
        a = '{"nqe_params":{"HalfLifeSeconds":"20", "EffectiveConnectionTypeRecomputationInterval":"5"},"enable_quic": false, "enable_redirect_info_report":true,"enable_nqe_report":true,"quic_host_blacklist": [".yximgs.com",".kwimgs.com",".etoote.com",".kwaicdn.com","112.6.83.72","112.6.83.73","112.6.83.74","112.6.83.77","112.6.83.78","112.6.83.79","112.6.83.80","112.6.83.81"],"congestion_control_frame_interval_sec": 0, "quic_max_v6_packet_size": 1232, "cdn_preresolver_ip_blacklist":["0.0.0.0","1.1.1.1","127.0.0.1"], "preconnect_num_streams": 2, "quic_idle_timeout_sec": 180, "quic_use_bbr": true, "altsvc_broken_time_max": 600, "altsvc_broken_time_base": 60, "proxy_host_blacklist": ["*"],"max_os_version_libdispatch_fix_enable":"16.2", "enable_mtrequest_by_header":true,"resolver_ip_blacklist":["0.0.0.0","1.1.1.1","127.0.0.1"]}';
        return this.nativeUpdateConfig(a, b);
    }
})

上面脚本使用frida来进行hook,对com.kuaishou.aegon.Aegon类的 nativeUpdateConfig方法,然后在调用这个方法时修改参数a的值,最后调用原始方法,注入命令如下:

frida -U -l ks.js -f com.smile.gifmaker

2. APP端抓包分析

  一切前置工作准备就绪后,打开预先下载好的APP,我这里下载的版本是10.0的,随便点击一个视频,查看抓包信息,如下所示:

在这里插入图片描述

抓包看来是OK的,正常拿到评论加载的接口信息:

在这里插入图片描述

这里抓包可以看到有sig参数的,这个签名字段是POST请求,看过我之前文章的读者,应该可以先盲猜一下这个签名的算法,大概率是一个MD5的就加密算法,如下所示:

在这里插入图片描述

它是将POST里面的参数一起排序做的计算,我想想!记得跟之前的某麦方式极其相似

另外爬虫这个圈子的人都知道,设备注册,上面的did这个过滑块也是要带上的,某音的话是device_id,目前这些自媒体、电商都是有滑块验证的

上面的这些个一系列内容值得深入去持续研究分析,而且每一项都可以单独拿出来说,等之后深入分析后我也会陆续的汇总出来,今天我们主要只针对爬虫数据层面获取

3. Web端抓包分析

  你如果不想分析移动端,它也是有Web端的。Web端很简单,一些少量数据分析指标,完全可以从这里入手,首先我们通过关键词搜索作者,抓包分析如下:

在这里插入图片描述

可以看到graphql的数据请求接口,搜索跟评论的接口是一样的,提交请求的头跟参数来区别,如下所示:

https://www.kuaishou.com/graphql

动态加载接口中,GraphQL在境外的些网站也经常见到,对于传统的 RESTful API,使用的场景也是蛮多的

接下来我们再看看评论,抓包分析一下请求:

在这里插入图片描述

4. 爬虫代码实现

  针对上述简介信息的抓包分析情况,开始编写Python爬虫的测试代码,代码实现如下:

import aiohttp
import asyncio

async def make_request():
    url = 'https://www.kuaishou.com/graphql'
    headers = {
        'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive',
        'Cookie': '' # cookies,
        'Origin': 'https://www.kuaishou.com',
        'Pragma': 'no-cache',
        'Referer': 'https://www.kuaishou.com/search/author?searchKey=%E8%BE%9B%E5%B7%B4',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36',
        'accept': '*/*',
        'content-type': 'application/json',
        'sec-ch-ua': '"Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"macOS"',
    }
    data = {
        'operationName': 'graphqlSearchUser',
        'variables': {'keyword': '辛巴'},
        'query': 'query graphqlSearchUser($keyword: String, $pcursor: String, $searchSessionId: String) {\n  visionSearchUser(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId) {\n    result\n    users {\n      fansCount\n      photoCount\n      isFollowing\n      user_id\n      headurl\n      user_text\n      user_name\n      verified\n      verifiedDetail {\n        description\n        iconType\n        newVerified\n        musicCompany\n        type\n        __typename\n      }\n      __typename\n    }\n    searchSessionId\n    pcursor\n    __typename\n  }\n}\n'
    }

    async with aiohttp.ClientSession() as session:
        async with session.post(url, headers=headers, json=data) as response:
            response_text = await response.text()
            print(response_text)

asyncio.run(make_request())

针对上述评论信息的抓包分析情况,开始编写Python爬虫的测试代码,就请求头稍微不一样,然后就是请求的参数,代码如下:

import aiohttp
import asyncio

async def make_request():
    url = 'https://www.kuaishou.com/graphql'
    data = {
        'operationName': 'commentListQuery',
        'variables': {'photoId': '3xb9bfwgtrtfj8s', 'pcursor': '750067524554'},
        'query': 'query commentListQuery($photoId: String, $pcursor: String) {\n  visionCommentList(photoId: $photoId, pcursor: $pcursor) {\n    commentCount\n    pcursor\n    rootComments {\n      commentId\n      authorId\n      authorName\n      content\n      headurl\n      timestamp\n      likedCount\n      realLikedCount\n      liked\n      status\n      authorLiked\n      subCommentCount\n      subCommentsPcursor\n      subComments {\n        commentId\n        authorId\n        authorName\n        content\n        headurl\n        timestamp\n        likedCount\n        realLikedCount\n        liked\n        status\n        authorLiked\n        replyToUserName\n        replyTo\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n}\n'
    }

    async with aiohttp.ClientSession() as session:
        async with session.post(url, headers=headers, json=data) as response:
            response_text = await response.text()
            print(response_text)

asyncio.run(make_request())

在这里插入图片描述

搜索接口的话这里我实现的是APP端的爬取,可以看到下面就是运行效果:

在这里插入图片描述

在这里插入图片描述

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1270037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go 从编译到执行

一、Go运行编译简介 Go语言(也称为Golang)自从2009年由Google发布以来,已成为现代软件开发中不可或缺的一部分。设计者Rob Pike, Ken Thompson和Robert Griesemer致力于解决多核处理器、网络系统和大型代码库所引发的现实世界编程问题。我们…

LeetCode刷题---斐波那契数列模型

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、第N个泰波那契数 题目链接:1137. 第 N 个泰波那契数 题目描述 泰波那契序列Tn定义如下: T00,T11,T2 1,且在n&g…

【SpringCloud原理】OpenFeign原来是这么基于Ribbon来实现负载均衡的

大家好,本文我将继续来剖析SpringCloud中负载均衡组件Ribbon的源码。本来我是打算接着OpenFeign动态代理生成文章直接讲Feign是如何整合Ribbon的,但是文章写了一半发现,如果不把Ribbon好好讲清楚,那么有些Ribbon的细节理解起来就很…

Pycharm2020.3.5激活方式

激活插件链接:https://pan.baidu.com/s/1tPd7V4pKUx0Z6fSKumLjTQ 提取码:lr12 1.pycharm主界面点开设置如下: 2.点击 Plugins 然后依次点击:小齿轮->选择本地安装(下图) 3.找到存放插件的目录&#xf…

系统设计概念:生产 Web 应用的架构

在你使用的每个完美应用程序背后,都有一整套的架构、测试、监控和安全措施。今天,让我们来看看一个生产就绪应用程序的非常高层次的架构。 CI/CD 管道 我们的第一个关键领域是持续集成和持续部署——CI/CD 管道。 这确保我们的代码从存储库经过一系列测试…

用customize-cra+react-app-rewired配置less+css module

1. 安装 npm i less less-loader -D npm i customize-cra-less-loader -D2.添加配置项 //config-overrides.js const { override } require(customize-cra); const addLessLoader require("customize-cra-less-loader");module.exports {webpack: override(addL…

解决VS2019无法正常显示XAML设计界面问题

问题描述 当VS2019配置工程为x64模式时,打开工程中XAML页面可能出现如下错误提示,进而无法正常显示XAML设计界面。 There was an exception when loading the design time assembly C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\16.0_…

【云备份】热点管理模块

文章目录 整体思路概括热点管理实现构造函数Hotjudge ——热点判断RunModule ——运行模块 代码实现hot.hpp 整体思路概括 整体概括: 对服务器上备份的文件进行检测,那些文件长时间没有被访问,则认为是非热点文件 进行压缩存储,节…

基于UDP的网络聊天室

客户端 #include <myhead.h> //定义存储信息结构体 typedef struct _MSG {char code; //操作码&#xff1a;L表示登录C表示群聊S表示系统消息S表示退出char name[128]; char txt[256];}msg_t;//定义保存客户端网络信息的链表 typedef struct _ADDR {struct sockaddr_i…

【Springboot系列】SpringBoot整合Jpa

文章目录 前言&#xff1a;什么是JPA&#xff1f;JPA优缺点优点1.简化开发&#xff1a;2.高度抽象&#xff1a;3.跨数据库支持&#xff1a;4.自动化的事务管理&#xff1a; 缺点1.学习成本较高&#xff1a;2.性能问题&#xff1a;3.灵活性受限&#xff1a; 示例版本依赖代码Use…

VSCode 代码调试

断点调试&#xff08;debug&#xff09;&#xff1a; 指在程序的某一行设置一个断点&#xff0c;调试时&#xff0c;程序运行到这一行就会停住&#xff0c;然后你可以一步一步往下调试&#xff0c;调试过程中可以看各个变量当前的值&#xff0c;出错的话&#xff0c;调试到出错…

NSSCTF第14页(1)

[suctf 2019]checkin 利用了几种方式&#xff0c;发现都不行 1是修改mime类型&#xff0c;2是修改php标签为js标签&#xff0c;3是修改文件后缀 在试试用配置文件来上传 发现上传.user.ini文件成功 发现上传成功 上传的png图片 访问上传路径发现可以访问&#xff0c;上马成…

位运算算法【2】

文章目录 &#x1f377;371. 两整数之和&#x1f959;题目&#x1f345;算法原理&#x1f346;代码实现 &#x1f378;137. 只出现一次的数字 II&#x1f9c6;题目&#x1fad2;算法原理&#x1f954;代码实现 &#x1f379;面试题 17.19. 消失的两个数字&#x1f95a;题目&…

Android : GPS定位 获取当前位置—简单应用

示例图&#xff1a; MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…

burp2023专业版,配置上游代理太难找

burpsuite2023专业版的工具栏与之前的版本不同的是&#xff0c;工具栏中没有了user options这一选项 但在通常的使用过程中&#xff0c;常用到配置上游代理。之前的版本呢&#xff0c;上游代理的配置都在user options选项中设置&#xff0c;user options选项还在工具栏中&#…

小航助学题库蓝桥杯题库c++选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

【JS Promise, Promise.all 与 async/await用法详解】

目录 PromisePromise基本使用Promise可进行连续回调Promise回调可接受入参1.工作原理 async/await总结参考文档&#xff1a; 异步 let a 0setTimeout(() > {a 1}, 1000)console.log(a) // 0此时这个延迟就成为异步执行的了&#xff0c;a值还没有变1就被使用输出&#xff0…

【产品经理】AI在SaaS产品中的应用及挑战

随着ChatGPT大模型在全球的爆火&#xff0c;AI迅速在各个行业内&#xff0c;助力于各行业的效率提升。而SaaS领域&#xff0c;AI同样也大有可为。 AI&#xff08;人工智能&#xff0c;Artificial Intelligence的缩写&#xff09;近一年来一直处于舆论风口&#xff0c;随着ChatG…

NX二次开发UF_CURVE_create_bridge_feature 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_bridge_feature Defined in: uf_curve.h int UF_CURVE_create_bridge_feature(UF_CURVE_bridge_data_p_t bridge_data, tag_p_t bridge_feature ) overview 概述 …

在零信任架构下的API安全与滥用防护(上)

引言 在当今数字化的浪潮中&#xff0c;应用程序编程接口&#xff08;API&#xff09;的战略重要性愈发凸显。API不仅仅是现代软件和互联网服务之间沟通的桥梁&#xff0c;更是企业价值创造的核心。随着API的快速发展和广泛应用&#xff0c;安全问题随之而来&#xff0c;其中A…