Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

APP抓包

前面我们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取。现在手机 App 用的越来越多,而且很多也没有网页端,比如抖音就没有网页版,那么上面的视频就没法批量抓取了吗?

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

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

Fiddler 安装配置

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

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

然后在 Connections 标签页下面勾选上 Allow remote computers to connect,允许 Fiddler 接受其他设备的请求。

同时要记住这里的端口号,默认是 8088,到时候需要在手机端填。

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

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

手机端配置

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

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

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

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

保存后,在手机原生浏览器打开 http://192.168.1.3 :8008 ,就是上面我们的计算机 IP 和端口。这一步我在夸克浏览器中打开是不行的,一定要到手机自带的浏览器打开。Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

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

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

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

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

抓包

我们打开抖音 App,会发现 Fiddler 上出来很多连接。我们先清空没用的连接信息,然后滑动到某个人的主页上,来查看他发布过的所有视频,同时在 Fiddler 上找到视频链接。

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

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

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

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

代码

代码很简单,和我们前几篇讲的一样,直接用 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?=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‘)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

运行后就可以得到视频列表:

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

Python爬虫新手教程:实战APP抓包,抖音的×××姐等着我!

上一篇:iOS----------如何给github的README添加图片


下一篇:Android日期操作