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

文章目录

  • 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.mfbz.cn/a/203069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鸟群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸟群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

【网络】传输层 -- 详解IP协议及IP协议的分片原理

目录 一、IP协议基本概念二、IP协议头格式1、报头和有效载荷如何分离2、有效载荷是如何向上交付(分用)的3、具体IP报头 三、网段划分1、什么是网段划分2、如何进行子网划分?再次理解子网划分及如何划分 3、私有IP地址和公网IP地址4、路由 四、…

【笔记】windows+pytorch:部署一下stable diffusion和NeRF

之前都是 *nix 环境使用 pytorch,这次尝试了一下windows。 我们来部署下流行性高的stable diffusion和我觉得实用性比stable diffusion高多了的NeRF Stable Diffusion 其实,我也不知道要写啥,都是按照步骤做就好了,后面等有时间…

防孤岛装置在光伏发电、燃气发电等新能源并网供电系统的应用

• AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。 • 当发生孤岛现象时,可以快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全**。 保护功能** ● 三段式过流…

【开源】基于Vue+SpringBoot的服装店库存管理系统

项目编号: S 052 ,文末获取源码。 \color{red}{项目编号:S052,文末获取源码。} 项目编号:S052,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…

最新去水印小程序源码分享/无需后台/对接接口/支持全网去水印功能

2023年最新去水印小程序源码分享:无需后台、对接接口,支持全网去水印功能 该小程序的用户界面设计都非常出色,给人一种视觉上的享受。 下载地址:https://bbs.csdn.net/topics/617662270

Egg.js中Cookie和Session

Cookie HTTP请求是无状态的,但是在开发时,有些情况是需要知道请求的人是谁的。为了解决这个问题,HTTP协议设计了一个特殊的请求头:Cookie。服务端可以通过响应头(set-cookie)将少量数据响应给客户端&#…

塑料注塑件自动化光学测量蓝光自动化三维检测解决方案-CASAIM-IS(2ND)

一、背景介绍 在塑料制品的生产过程中,注塑件的质量对于产品的整体质量和性能至关重要。然而,通过使用三坐标、卡尺、千分尺等量具,对工件进行单点或人工检测其加工精度,对复杂形位公差检测目前比较难取得数据,无法快…

Golang数据类型(数组)

数组重要概念 数组(Array)是一种非常常见的数据类型,几乎所有的计算机编程语言中都会用到它 在Go语言中,数组有如下的特点: 数组里的元素必须全部为同一类型,要嘛全部是字符串,要嘛全部是整数…

从零开始部署一个网站详细图文教程——腾讯云的服务器、SSL证书,阿里云的域名,七牛云的对象存储、CDN等

文章目录 前期准备连接服务器配置Golang环境安装配置MySQL安装配置Redis安装配置Nginx安装Node域名解析SSL证书下载启动项目配置CDN加速总结 前期准备 云服务器(必备)、已经备案的域名(必备),已签发的SSL证书&#xf…

ABAP2XLSX 的安装和demo

ABAP2XLSX 是一个git上面的很好用的工具,它可以帮助abaper们更方便,更简单的生成各种各样复杂的自定义的excel,以满足各企业的信息化建设 在安装这个之前,请先查看之前的博客,去安装abapgit abap2xlsx地址&#xff1…

RabbitMQ的基本介绍

RabbitMQ的基本介绍 基于AMQP协议,Erlang语言开发,是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一。 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议&a…

MySQL之undo日志

聊聊undo log 什么是undo log undo log(回滚事务),在事务没有提交前,MySQL将记录更新操作的反向操作到undo log日志中,以便进行回退保证事务的原子性 undo log的作用 1.提供回滚操作 我们在进行数据更新操作的时候…

肖sir__搭建环境报错:com.alibaba.druid:type=DruidDataSourceStat异常

报错现象: 解决方案: 同一个服务器配置多个tomcat,而这些tomcat里边的项目配置的数据库连接池都是用alibaba.druid。下面说下我的解决过程,首先,修改tomcat bin目录下的catalina.sh,添加如下代码: 代码如…

Flink(八)【窗口】

前言 终于忙完了四门专业课的期末,确实挺累啊。今天开始继续学习 Flink ,接着上次的内容。 今日摘录: 他觉得一个人奋斗更轻松自在。跟没有干劲的人在一起厮混,只会徒增压力。 -《解忧杂货店》 1、窗口 之前我们已经了解了…

HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略

版本更新 HyperBDR云容灾v4.10.1版本来啦! 此次更新为大家带来了多个新功能,下面让我们来看看具体是哪些吧~ 01 策略管理新功能: 多时间段限速功能: 更加灵活的多个时间段限速选择,可以在创建策略时为不同的时间段设…

Zoho CRM:高效捕捉线索,精准管理客户

线索管理是销售过程中的重要环节,它可以获取潜在客户信息,有效的管理和转化,提高企业销售业绩。如今,Zoho CRM管理系统广泛应用于更多的企业,他们使用CRM系统进行线索管理,用以提高线索转化率。下面就来说说…

VsCode中使用功能vite创建vue3+js项目报错

VsCode中使用功能vite创建vue3js项目报错 VsCode中使用功能vite创建vue3js项目import模块报错如下处理方法 VsCode中使用功能vite创建vue3js项目import模块报错如下 处理方法 在项目根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&q…

YOLOv7独家原创改进:自研独家创新FT_Conv,卷积高效结合傅里叶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换和分数阶Gabor变换,最终创新到YOLOv7。 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 收录YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.htm…

虚拟机指定开放数据库3306端口

1、查看当前防火墙状态: sudo firewall-cmd --state 2、开放指定端口 sudo firewall-cmd --zonepublic --add-port3306/tcp --permanent 3、重新加载防火墙配置 sudo firewall-cmd --reload 4、检查端口是否开放成功 sudo firewall-cmd --zonepublic --list-por…
最新文章