Python爬虫-抖音小视频-mitmproxy与Appium


目的:  爬取抖音小视频

工具:  mitmproxy、Appium

思路:

  1.  通过 mitmproxy 截取请求, 找出 response 为 video 的请求.

  2.  通过 mitmdump 对接 python 对上述请求进行处理.

  3.  配合 Appium 实现自动抓取视频.

方法:

  1.  设置 mitmprxoy 为手机的代理, 并且启动 mitmproxy.

  2.  打开抖音, 并滑动页面.

  3.  观察 mitmproxy 的页面. 通过不停的滑动, 返回类型为 video 都是如下类型的请求.

所以猜测储存视频的服务器都是如下类型(不一定全正确, 但是至少有正确的).

web_list = ['v3-dy.ixigua.com', 'v3-dy-x.ixigua.com', 'v3-dy-y.ixigua.com', 'v3-dy-z.ixigua.com',

      'v6-dy.ixigua.com', 'v6-dy-x.ixigua.com', 'v6-dy-y.ixigua.com', 'v6-dy-z.ixigua.com',

      'v9-dy.ixigua.com', 'v9-dy-x.ixigua.com', 'v9-dy-y.ixigua.com', 'v9-dy-z.ixigua.com']

  4.  编写处理截获数据的处理脚本, 如下:

 1 from urllib.request import urlretrieve  2 # 视频编号
 3 num = 1
 4 # 用于视频去重
 5 duplicate = set()  6 
 7 
 8 def request(flow):  9     # 本次请求的url
10     video_url = flow.request.url 11     global num 12     url_list = ['v3-dy.ixigua.com', 'v3-dy-x.ixigua.com', 'v3-dy-y.ixigua.com', 'v3-dy-z.ixigua.com', 13                 'v6-dy.ixigua.com', 'v6-dy-x.ixigua.com', 'v6-dy-y.ixigua.com', 'v6-dy-z.ixigua.com', 14                 'v9-dy.ixigua.com', 'v9-dy-x.ixigua.com', 'v9-dy-y.ixigua.com', 'v9-dy-z.ixigua.com'] 15     # 视频保存路径
16     path = '/home/ysl/视频/'
17     # 判断是否重复, 不重复才继续执行
18     if video_url not in duplicate: 19  duplicate.add(video_url) 20         for url in url_list: 21             if url in flow.request.url: 22                 filename = path + str(num) + '.mp4'
23                 # 下载视频, 保存到本地
24  urlretrieve(flow.request.url, filename) 25                 print(filename + '下载完成') 26                 num += 1
27                 # 这里是猜测不同服务器里可能存有相同的视频, 所以一旦下载到视频就退出循环.
28                 return

现在手动滑动视频的话就已经会逐个下载了, 但是手动的毕竟麻烦, 所以搭配 Appium 实现自动化.

  5.  将手机通过数据线和运行 Appium 的电脑相连, 打开手机的 USB 调试功能.  首先需要确定启动抖音的 Desired Capabilities 参数, platformName、deviceName、appPackage、appActivity, 具体的获取方法可以百度一下, 对于我手机上的抖音而言, 参数如下:

这里我还设置了一下 noReset 为 true, 不然的话, 好像每一次手机都会重新安装抖音. 下面是 Appium 驱动手机的代码:

 1 from appium import webdriver  2 from appium.webdriver.common.touch_action import TouchAction  3 import time  4 
 5 
 6 # Appium服务器
 7 server = 'http://localhost:4723/wd/hub'
 8 # 参数
 9 desired_caps = { 10     "appActivity": ".main.MainActivity", 11     "appPackage": "com.ss.android.ugc.aweme", 12     "deviceName": "SM_G9500", 13     "platformName": "Android", 14     "noReset": True 15 } 16 # 类似于selenium
17 driver = webdriver.Remote(server, desired_caps) 18 # 等待app启动
19 time.sleep(10) 20 # 设置时限, 如果想一直爬可以使用while True.
21 for i in range(20): 22     # TouchAction(driver).press(x=607, y=1976).move_to(x=613, y=982).release().perform()
23     time.sleep(2) 24     driver.swipe(607, 1976, 613, 800, 500)

确保 Appium 服务已经启动.

  6. 命令行中执行 mitmdump -s 脚本名, 然后运行 Appium 代码. 

 

结果:  Appium 驱动手机滑动页面, 抖音小视频被下载至指定路径.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM