Fiddler抓取视频数据「建议收藏」

准备工作:(1)、手机(安卓、ios都可以)/安卓模拟器,今天主要以安卓模拟器为主,操作过程一致。(2)、抓包工具:Fiddel下载地址:(https://www.telerik.com/download/fiddler)(3)、编程工具:pycharm(4)、安卓模拟器上安装抖音(逍遥安装模拟器)一、fiddler配置在tools中的options中,按照图中勾选后点击Actio…

大家好,又见面了,我是你们的朋友全栈君。

本文仅供参考学习,禁止用于任何形式的商业用途,违者自行承担责任。


准备工作:

(1)、手机(安卓、ios都可以)/安卓模拟器,今天主要以安卓模拟器为主,操作过程一致。

(2)、抓包工具:Fiddel 下载地址:(https://www.telerik.com/download/fiddler )

(3)、编程工具:pycharm

(4)、安卓模拟器上安装(逍遥安装模拟器)

一、fiddler配置

在tools中的options中,按照图中勾选后点击Actions, 选择Trust Root Certificate。

在这里插入图片描述
配置远程链接:

选择允许监控远程链接,端口可以随意设置,只要别重复就行,默认8888

在这里插入图片描述
然后:重启fiddler!!!这样配置才能生效。

二、安卓模拟器/手机配置

首先查看本机的IP:在cmd中输入ipconfig,记住这个IP

在这里插入图片描述
手机确保和电脑在同一局域网下。

手机配置:配置已连接的WiFi,代理选择手动,然后输入上图ip端口号为8888

模拟器配置:设置中长按已连接wifi,代理选择手动,然后输入上图ip端口号为8888

在这里插入图片描述
在这里插入图片描述

代理设置好后,在浏览器中输入你设置的ip:端口,例如10.10.16.194:8888,就会打开fiddler的页面。然后点击fiddlerRoot certificate安装证书,要不手机会认为环境不安全。

证书名称随便设,可能还需要设置一个锁屏密码。

在这里插入图片描述
接下来就可以在fiddler中抓到手机/模拟器软件的包了。

三、抓包

打开app,然后观察fiddler中所有的包

其中有个包,包类型为json(json就是网页返回的数据,具体百度),主机地址如图,包大小一般不小,这个就是视频包。
在这里插入图片描述

点击这个json包,在fidder右侧,点击解码,我们将视频包的json解码

在这里插入图片描述

解码后:点击aweme_list,其中每个大括号代表一个视频,每次加载一点出来,等你看完预加载的,再重新加载一些。在这里插入图片描述
Json是一个字典,我们的视频链接在:aweme_list中,每个视频下的video下的play_addr下的url_list中,一共有6个url,是完全一样的视频,可能是为了应付不同环境,但是一般第3或4个链接的视频不容易出问题,复制链接,浏览器中粘贴就能看到视频了。在这里插入图片描述

接下来解决几个问题,

1、视频数量,每个包中只有这么几个视频,那如何抓取更多呢?

这时候需要借助模拟器的模拟鼠标翻页,让模拟器一直翻页,这样就不断会出现json包了。

在这里插入图片描述

2、如何json保存在本地使用

一种方法可以手动复制粘贴,但是这样很low。

所以我们使用fidder自带的脚本,在里面添加规则,当视频json包刷出来后自动保存json包。

自定义规则包:

链接:https://pan.baidu.com/s/1wmtUUMChzuSDZFYGSyUhCg

提取码:7z0l

if (oSession.uriContains("https://api-eagle.amemv.com/aweme/v1/feed/")){
           var strBody=oSession.GetResponseBodyAsString();
           var sps = oSession.PathAndQuery.slice(-58,);
           //FiddlerObject.alert(sps)
           var filename = "C:/Users/HEXU/Desktop/数据爬取/爬取资料/raw_data" + "/" + sps + ".json";  
           var curDate = new Date();   
           var sw : System.IO.StreamWriter;  
           if (System.IO.File.Exists(filename)){  
               sw = System.IO.File.AppendText(filename);  
               sw.Write(strBody);  
           }  
           else{  
               sw = System.IO.File.CreateText(filename);  
               sw.Write(strBody);  
           }  
            
           sw.Close();  
           sw.Dispose();  
       }

点击规则脚本,然后将自定义规则放在如图所示位置:

在这里插入图片描述

这个脚本有两点需要修改的:

(1)第一行的网址:

这个是从视频包的url中摘出来的,某音会时不时更新这个url,所以不能用了也要去更新:

比如现在的已经和昨天不同了,记着修改。
在这里插入图片描述

(2)路径,那个是我设置json包保存的地址,自己一定要去修改,并创建文件夹,修改完记着点保存。在这里插入图片描述

打开设置好模拟器和脚本后,等待一会,就可以看到文件夹中保存的包了:
在这里插入图片描述


四、爬虫脚本

接下来在pycharm中写脚本获取json包里的视频链接:

导包:

import os,json,requests

伪装头:
headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36’}

逻辑代码:
在这里插入图片描述

效果:在这里插入图片描述


源码:

import os,json,requests
#伪装头
headers = { 
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'}

videos_list = os.listdir('C:/Users/HEXU/Desktop/数据爬取/爬取资料/raw_data/')  #获取文件夹内所有json包名

count = 1  #计数,用来作为视频名字

for videos in videos_list:  #循环json列表,对每个json包进行操作
    a = open('./爬取资料/raw_data/{}'.format(videos),encoding='utf-8')  #打开json包
    content = json.load(a)['aweme_list'] #取出json包中所有视频

    for video in content:  #循环视频列表,选取每个视频
        video_url = video['video']['play_addr']['url_list'][4] #获取视频url,每个视频有6个url,我选的第5个
        videoMp4 =  requests.request('get',video_url,headers=headers).content #获取视频二进制代码
        with open('./爬取资料/VIDEO/{}.mp4'.format(count),'wb') as f: #以二进制方式写入路径,记住要先创建路径
            f.write(videoMp4)  #写入
            print('视频{}下载完成'.format(count)) #下载提示
        count += 1 #计数+1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126848.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java判断一个数是否为质数的代码_逻辑代数最小项

    java判断一个数是否为质数的代码_逻辑代数最小项给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问数列中第 l∼r 个数的和。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|d|≤10000,|A[i]|≤1

  • Linux下如何测网速

    Linux下如何测网速

  • linux中zip文件解压命令,Linux中zip压缩和unzip解压缩命令使用方法

    linux中zip文件解压命令,Linux中zip压缩和unzip解压缩命令使用方法Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在Linux中,我们可以利用命令进行文件压缩,即zip压缩和unzip解压缩,这篇文章主要介绍了详解Linux中zip压缩和unzip解压缩命令及使用详解,本文给大家介绍的非常详细,需要的朋友可以参考下下面给大家介绍下Linux中zip压缩和unzip解压缩命令详解1、把/home目录下面的mydata目录压缩为m…

  • 推荐系统FM & FFM算法解读与实践

    推荐系统FM & FFM算法解读与实践在推荐系统和计算广告业务中,点击率CTR(click-throughrate)和转化率CVR(conversionrate)是衡量流量转化的两个关键指标。准确的估计CTR、CVR对于提高流量的价值,增加广告及电商收入有重要的指导作用。业界常用的方法有人工特征工程+LR(LogisticRegression)、GBDT(GradientBoostingDecisionTree)+…

  • Java中有哪些集合,集合中有哪些类?

    Java中有哪些集合,集合中有哪些类?Java中所有的类都位于java.util包下,主要由两个接口派生出来,分别是Collection和Map.Collection包含了List和Set两大分支。Map是一个映射接口。Set、Map、List可以看做集合的三大类。而遍历集合的工具有Iterator和Enumeration;Arrays和Collection是操作数组集合的两个工具类。一、Java中的集合主要分为四类:1、L…

  • mysql查看版本sql_linux查看mysql版本

    mysql查看版本sql_linux查看mysql版本查询mysql版本(select查mysql版本)2020-07-2411:32:47共10个回答1、通过mysql的-V参数查询版本信息mysql-V2、登录mysql时可以查询版本信息mysql-u用户名-p用户密码3、数据库状态查询版本信息status;4、通过mysql数据库函数查询版本信息selectversion();5、通过version环境变量查询版本信息执行selectvers…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号