Fiddler抓取抖音APP视频源

一般情况如果要使用电脑抓APP的数据我都是共享PC的网络,然后让手机连接PC共享出来的这个Wifi的,以下要记录的是另外一种途径。

前言

PC端上的一些直播网站我们直接使用浏览器抓包,就可提取直播源。但现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视频就没法批量抓取了吗?

答案当然是否定的!对于 App 来说应用内的通信过程和网页是类似的,都是向后台发送请求,获取数据。在浏览器中我们打开调试工具就可以看到具体的请求内容,在 App 中我们无法直接看到。所以我们就要通过抓包工具来获取到 App 请求与响应的信息。关于抓包工具有 Wireshark,Fiddler,Charles等。今天我们讲一下如何用 Fiddler 进行手机 App 的抓包。

Fiddler 的工作原理相当于一个代理,配置好以后,我们从手机 App 发送的请求会由 Fiddler 发送出去,服务器返回的信息也会由 Fiddler 中转一次。所以通过 Fiddler 我们就可以看到 App 发给服务器的请求以及服务器的响应了。

Fiddler 安装配置

我们安装好 Fiddler 后,首先在菜单 Tool>Options>Https 下面的这两个地方选上。

《Fiddler抓取抖音APP视频源》

然后在 Connections 标签页下面勾选上 Allow remote computers to connect,允许 Fiddler 接受其他设备的请求。
同时要记住这里的端口号,默认是 8088,到时候需要在手机端填。

《Fiddler抓取抖音APP视频源》

配置完毕,保存后,一定关掉 Fiddler 重新打开。

手机端配置

确保手机和电脑在同一个局域网中,我们先看下计算机的 IP 地址,在 cmd 中输入 ipconfig 就可以看到。我电脑用的是无线网,所以 IP 地址为 192.168.1.3。

《Fiddler抓取抖音APP视频源》

打开手机无线连接,选择要连接的热点。长按选择修改网络,在代理中填上我们电脑的 IP 地址和 Fiddler 代理的端口。如下图所示:

《Fiddler抓取抖音APP视频源》

保存后,在手机原生浏览器打开 http://192.168.1.3:8008 ,就是上面我们的计算机 IP 和端口。这一步我在夸克浏览器中打开是不行的,一定要到手机自带的浏览器打开。

打开后,点击下图链接,下载证书,然后安装证书。

电脑端浏览器也需要打开此地址,安装证书,方便以后对浏览器的抓包操作。

《Fiddler抓取抖音APP视频源》

安装后就万事 OK 了,可以用手机打开 App ,在 Fiddler 上愉快的抓包了。

抓视频地址

1、打开抖音播放任意一条视频,在 Fiddler 找到并复制出视频地址。

《Fiddler抓取抖音APP视频源》

2、然后滑动到某个人的主页上,来查看他发布过的所有视频,同时在 Fiddler 上找到视频链接。

《Fiddler抓取抖音APP视频源》

经过观察筛选我们可以看出上图就是我们需要的请求地址,这个地址其实是可以在浏览器上打开的,但是我们需要改一下浏览器的User-Agent,我用的是Firefox的插件,打开后和 Fiddler 右边的信息是一致的。我们看下 Fiddler 右边该请求的响应信息。

《Fiddler抓取抖音APP视频源》

看到返回了一个 JSON 格式的信息,其中aweme_list 就是我们需要的视频地址,has_more=1 表示往上滑动还会加载更多。之后就可以写自动化代码了。

Python代码

代码很简单,直接用 requests 请求相应链接即可。

代码仅做为一个简单的例子,仅仅下载当前页面的内容,如果要下载全部的视频,可以根据当次返回 JSON 结果中的 has_more 和 max_cursor 参数构造出新的 URL 地址不断的下载。

URL 中的 user_id 可以根据自己要爬取的用户更改,可以通过把用户分享到微信,然后在浏览器中打开链接,在打开的 URL 中可以看到用户的 user_id。

import requests
import urllib.request
def get_url(url):
    headers = {'user-agent': 'mobile'}
    req = requests.get(url, headers=headers, verify=False)
    data = req.json()
    for data in data['aweme_list']:
        name = data['desc'] or data['aweme_id']
        url = data['video']['play_addr']['url_list'][0]
        urllib.request.urlretrieve(url, filename=name + '.mp4')


if __name__ == "__main__":
    get_url('https://api.amemv.com/aweme/v1/aweme/post/?max_cursor=0&user_id=98934041906&count=20&retry_type=no_retry&mcc_mnc=46000&iid=58372527161&device_id=56750203474&ac=wifi&channel=huawei&aid=1128&app_name=aweme&version_code=421&version_name=4.2.1&device_platform=android&ssmix=a&device_type=STF-AL10&device_brand=HONOR&language=zh&os_api=26&os_version=8.0.0&uuid=866089034995361&openudid=008c22ca20dd0de5&manifest_version_code=421&resolution=1080*1920&dpi=480&update_version_code=4212&_rticket=1548080824056&ts=1548080822&js_sdk_version=1.6.4&as=a1b51dc4069b2cc6252833&cp=dab7ca5f68594861e1[wIa&mas=014a70c81a9db218501e1433b04c38963ccccc1c4cac4c6cc6c64c')

运行后就可以得到视频列表:
《Fiddler抓取抖音APP视频源》
以上同样适用于其他APP的抓包,请不要局限于本文例子。
以上方法,使用小米手机MIUI原厂系统,手机上无法安装证书,使用华为荣耀手机一切完美。

  1. SEO学习博客 说道:

    非常技术性的帖子,没事可以研究一下,哈哈!

  2. wordpress建站吧 说道:

    技术贴啊

  3. 常州厂房出租 说道:

    大神啊

  4. 老司机 说道:

    跪求P2P直播源和TVBS直播源抓取方法 希望能看到!!!

  5. 福州SEO 说道:

    能写出这样文章的,应该就是所谓的大佬吧

  6. 头条 说道:

    文章不错非常喜欢

  7. 老死机 说道:

    大神,能不能帮我研究下这个app,爱家电视,也就是福建广电的app
    通过抓包,知道返回直播参数的接口是这个
    http://portal.setvn.com:8080/PortalServer-App/new/aaa_aut_aut001
    但是我每次调用这个接口,都会出现403未授权错误,我确认headers和post的数据都是正确的,都是按照抓包的数据填的,有三个随机参数我也写函数模拟生成了
    更奇怪的是我调用这个接口
    http://portal.setvn.com:8080/PortalServer-App/new/ptl_ipvp_live_live008
    返回epg却是正常的,没有403错误(header跟post数据跟上一个接口是类似的)。
    其实我之前研究广东广电app时也碰到这个问题,调用返回直播源参数接口会有403错误,然后我发现程序初始化返回一个包里面有个参数也是用来返回直播源地址参数的,用这个地址没有403,但是福建广电的这个地址却是个局域网地址,我就没法用了。
    大神能帮我研究下吗?

  8. 老死机 说道:

    大神,请教一个问题,我用pc的wifi猎豹共享网络给手机,用wireshark抓包,发现奇怪的现象
    如果抓wlan(pc上网的本地连接)就只能抓到手机请求的包,如果抓wlan12(wifi猎豹创建的虚拟连接,共享给手机的)就只能抓到响应手机的包
    请问这是怎么回事?

  9. 猪年翻身稳妥项目 说道:

    厉害了

  10. 999 说道:

    一个app 搞定

    1. 黑鸟君 说道:

      哪个APP

发表评论

电子邮件地址不会被公开。 必填项已用*标注