前面咱们了解了一些关于 Python 爬虫的知识,不过都是基于 PC 端浏览器网页中的内容进行爬取。如今手机 App 用的愈来愈多,并且不少也没有网页端,好比抖音就没有网页版,那么上面的视频就无法批量抓取了吗?python
答案固然是 No!对于 App 来讲应用内的通讯过程和网页是相似的,都是向后台发送请求,获取数据。在浏览器中咱们打开调试工具就能够看到具体的请求内容,在 App 中咱们没法直接看到。因此咱们就要经过抓包工具来获取到 App 请求与响应的信息。关于抓包工具备 Wireshark,Fiddler,Charles等。今天咱们讲一下如何用 Fiddler 进行手机 App 的抓包。android
Fiddler 的工做原理至关于一个代理,配置好之后,咱们从手机 App 发送的请求会由 Fiddler 发送出去,服务器返回的信息也会由 Fiddler 中转一次。因此经过 Fiddler 咱们就能够看到 App 发给服务器的请求以及服务器的响应了。json
咱们安装好 Fiddler 后,首先在菜单 Tool>Options>Https 下面的这两个地方选上。api
而后在 Connections 标签页下面勾选上 Allow remote computers to connect,容许 Fiddler 接受其余设备的请求。
同时要记住这里的端口号,默认是 8088,到时候须要在手机端填。浏览器
配置完毕,保存后,必定关掉 Fiddler 从新打开。服务器
确保手机和电脑在同一个局域网中,咱们先看下计算机的 IP 地址,在 cmd 中输入 ipconfig 就能够看到。我电脑用的是无线网,因此 IP 地址为 192.168.1.3。微信
打开手机无线链接,选择要链接的热点。长按选择修改网络,在代理中填上咱们电脑的 IP 地址和 Fiddler 代理的端口。以下图所示:网络
保存后,在手机原生浏览器打开 http://192.168.1.3:8008 ,就是上面咱们的计算机 IP 和端口。这一步我在夸克浏览器中打开是不行的,必定要到手机自带的浏览器打开。app
打开后,点击下图连接,下载证书,而后安装证书。ide
电脑端浏览器也须要打开此地址,安装证书,方便之后对浏览器的抓包操做。
安装后就万事 OK 了,能够用手机打开 App ,在 Fiddler 上愉快的抓包了。
咱们打开抖音 App,会发现 Fiddler 上出来不少链接。咱们先清空没用的链接信息,而后滑动到某我的的主页上,来查看他发布过的全部视频,同时在 Fiddler 上找到视频连接。
通过观察筛选咱们能够看出上图就是咱们须要的请求地址,这个地址实际上是能够在浏览器上打开的,可是咱们须要改一下浏览器的User-Agent,我用的是Firefox的插件,打开后和 Fiddler 右边的信息是一致的。咱们看下 Fiddler 右边该请求的响应信息。
看到返回了一个 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&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')
运行后就能够获得视频列表:
有任何疑问,欢迎加我微信交流。