小白安全博客

小白记忆
专注网络安全

 如何利用Python抓抖音上的小姐姐

爬虫的案例我们已讲得太多。不过几乎都是 网页爬虫 。即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具 的 手机模拟 功能来访问,以便于分析请求并抓取。

但有些 App 根本就没有提供网页端,比如今年火得不行的 抖音 。(网上有些教程也是用网页手机模拟的方法,但此法现已失效。)

对于这种情况,我们能不能抓取?要怎么抓取?今天就来分享一下。

手机抓包
本文的重点就在于 如何获取手机 App 发出的请求 。

手机 App 不像电脑上的网页能直接通过浏览器查看相关信息,在手机设备上也不方便使用工具一边流量一边调试。所以常用的方式就是通过在电脑上装一些 “抓包”软件 ,将手机上的网络请求全部显示出来。

那为什么电脑能看到手机上的网络请求?这里就要提下“ 代理 ”这个概念。我们之前的文章 听说你好不容易写了个爬虫,结果没抓几个就被封了? 中也讲过代理。形象的解释就是字面的理解: 所有你发出的请求不再是直接发到目的地,而是先发给这个代理,再由代理帮你发出 。所以通过代理,可以实现 隐藏 IP、进入专用网络、翻…咳咳那啥 等功能,也包括我们今天说的: 手机抓包 。

顺带说句,在公共场所别随便连不确定的免费 wifi,理论上来说,人家也可以抓你的包。

这里,我们要用的工具是 Fiddler 。它是一个较成熟的免费抓包工具。可以抓取网页、桌面软件、手机 App 的网络请求,并可以运行在 Windows、Mac、Linux 平台上,支持 iOS 和 Android。(虽说都支持,但强烈建议 Windows + Android ,后面我会有吐槽)

下载安装

搜索一下 fiddler 很容易找到它们的官网 https://www.telerik.com/fiddler,点击 download 下载即可(有个表格随便填下)。

Windows 下载后正常安装。如果是 Mac,还会有安装步骤提示,告诉你需要先安装一个叫做 Mono 的框架,以便可以执行 Fiddler.exe。另外 Mac 版还有几个小坑:

1. 运行 mono 命令用 sudo

2. 如果报一堆错闪退,请用 mono --arch=32 Fiddler.exe(这个参数还必须放在文件名前面)

3. 第一次正确运行时,程序 会卡住很长时间 ,以至于我以为还是挂了,这时请耐心等待。(我要不是正好有事走开,回来发现成功了,可能就放弃尝试了)

4. 即使正常运行了,Mac 上界面也会有各种显示的 bug,切记不要打开的弹窗的情况下切换程序,不然回来就找不到弹窗了……

5. 软件中无法复制……

6. 在 iOS 上无法抓取 HTTPS 请求(这基本就是废了),需要额外创建一个证书,但这个证书工具只能在 Windows 下运行……

所以可以的话,还是用 Windows 来做。Mac 上还有个比较知名的工具 Charles ,有用过的可以留言评价下。

配置

安装好工具后,需要做一些必要配置才能抓包。

1. Fiddler 配置

设置允许抓取 HTTPS 信息包。打开下载好的 fiddler,找到 Tools – > Options,然后在 HTTPS 的工具栏下勾选 Decrpt HTTPS traffic ,在新弹出的选项栏下勾选 Ignore server certificate errors 。这样,fiddler 就会抓取到 HTTPS 的信息包。

如何利用 Python 抓抖音上的小姐姐

设置允许外部设备发送 HTTP/HTTPS 到 fiddler。设置 端口号 ,并在 Connections 选项栏下勾选 Allow remote computers to connect 。

如何利用 Python 抓抖音上的小姐姐

配置好后需重启软件。

2. 设置手机代理

在抓包前,确保你的电脑和手机是在一个 可以互访的局域网中 。最简单的情况就是都连在同一个 wifi 上,特殊情况这里不展开讨论(有些商用 wifi 并不能互访)。

打开软件,鼠标放在右上角的 Online 上可以看到 本机的 IP 。或者也可以通过命令行中的 ipconfig 命令(Mac/Linux 是 ifconfig )查看。(截图仅为演示,以你自己的 IP 为准)如何利用 Python 抓抖音上的小姐姐如何利用 Python 抓抖音上的小姐姐

手机设置代理 IP。打开手机 无线网络连接 ,选择已经连接的网络连接,点击一个小圆圈叹号进入可以看到下图(安卓也类似),选择 配置代理 ,进入后把刚刚的 IP 地址 输入进去, 端口 就是 fiddler 中设置的 8888。

如何利用 Python 抓抖音上的小姐姐

3. 安装证书

获取 HTTPS 请求必须要 验证证书 。电脑端访问:http://localhost:8888/ 进行安装。

如何利用 Python 抓抖音上的小姐姐

手机访问前面设置的电脑的 IP 地址加端口 8888 访问,比如图中例子是:http://192.168.23.1:8888如何利用 Python 抓抖音上的小姐姐

有些安卓需要手动从设置里进入并导入证书,否则无法生效。

4. 测试

开启 fiddler 的状态下,打开手机随便一个 APP,应对可以正常访问,并且在 fiddler 中看到所发出的网络请求。

如何利用 Python 抓抖音上的小姐姐

如果能访问但看不到请求,确认下有没有代理有没有生效。如果不能访问,检查下证书是否都下载并验证。还是不行则按照上述步骤再仔细配置一遍。

分析请求

完成这一步之后,接下来的事情就和网页爬虫没太大区别了。无非就是从这些请求中,找到我们需要的那几个。

fiddler 里记录的是所有请求,比较多。在操作 App 前,记得清空已有请求,方便观察。然后再配合上 filter 筛选器 ,定义筛选规则,会较容易找你需要的内容。找到请求后,在软件里查看你要的信息,或者右键点击选择将请求导出。

如何利用 Python 抓抖音上的小姐姐

经过操作+观察,可以定位到获取用户上传视频列表的请求是

https://api.amemv.com/aweme/v1/aweme/post/?…

从 WebForms 栏里可以查看请求的详细参数信息。返回值是一个组 JSON 数据,里面包含了视频的下载地址。

如何利用 Python 抓抖音上的小姐姐

这是一个需要经验积累的活儿,不同的网站/App,规则都不一样,但套路是相似的。

代码抓取

得到地址之后,经过在浏览器和代码里的一番尝试,找到了此请求的正确解锁方式:

1. 需要提供以下参数:max_cursor=0&user_id=94763945245&count=20&aid=1128,其中 user_id 是你要抓取的用户 ID,其他参数都可以固定不用改。

2. 需要使用手机的 User-Agent ,最简单的就是 {'user-agent': 'mobile'}

请求代码:

  1. import requests as rs
  2. uid = 94763945245
  3. url = 'https://api.amemv.com/aweme/v1/aweme/post/?max_cursor=0&user_id=%d&count=20&aid=1128' % uid
  4. h = {'user-agent': 'mobile'}
  5. req = rs.get(url, headers=h, verify=False)
  6. data = req.json()
  7. print(data)

uid 替换成你想抓的用户 ID。获取用户 ID 有个简单方法:在用户页面选择分享,链接发到微信上,从网页打开就可以看到 user_id。

提取视频列表并下载:

  1. import urllib.request
  2. for video in data['aweme_list']:
  3. name = video['desc'] or video['aweme_id']
  4. url_v = video['video']['download_addr']['url_list'][0]
  5. print(name, url_v, '\n')
  6. urllib.request.urlretrieve(url_v, name + '.mp4')

如何利用 Python 抓抖音上的小姐姐
此方法截止国庆假期还是有效的,可以通过 Chrome 开发者工具进行模拟。之后能使用多久这就没法保证了,爬虫代码都不会是一劳永逸的。

总结下,重点是 fiddler 的抓取 ,关键是 配置、代理、证书 ,难点是 对请求的分析 。最终代码只有简单两步, 获取视频列表、下载视频 。

原文地址:http://www.52ziji.cn/archives/179


×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏,请先点一下下面的付款方式

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

 您阅读这篇文章共花了:

打赏作者
版权所有,转载注明出处:小白安全博客-菜鸟安全博客-小白个人博客 » 如何利用Python抓抖音上的小姐姐»https://www.xiaobaibk.com/xiao-bai-325.html
标签: python

发表评论

表情

网友评论(2)

说的很有道理 感谢
胖球 5个月前 (2019-03-24) 回复
66666
胖球 5个月前 (2019-03-24) 回复