zoukankan      html  css  js  c++  java
  • 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 驱动手机滑动页面, 抖音小视频被下载至指定路径.

  • 相关阅读:
    第一节:从程序集的角度分析System.Web.Caching.Cache ,并完成基本封装。
    大话缓存
    第二节:SQLServer的安装及使用
    OpenCV特征点检测——ORB特征
    Opencv学习笔记--Harris角点检测
    关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解
    [论文笔记] CUDA Cuts: Fast Graph Cuts on the GPU
    Graph Cut and Its Application in Computer Vision
    OpenCV中openMP的使用
    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT。
  • 原文地址:https://www.cnblogs.com/yangshaolun/p/10896366.html
Copyright © 2011-2022 走看看