目的:  爬取抖音小视频

工具:  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.  编写处理截获数据的处理脚本, 如下:

 from urllib.request import urlretrieve
# 视频编号
num = 1
# 用于视频去重
duplicate = set() def request(flow):
# 本次请求的url
video_url = flow.request.url
global num
url_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']
# 视频保存路径
path = '/home/ysl/视频/'
# 判断是否重复, 不重复才继续执行
if video_url not in duplicate:
duplicate.add(video_url)
for url in url_list:
if url in flow.request.url:
filename = path + str(num) + '.mp4'
# 下载视频, 保存到本地
urlretrieve(flow.request.url, filename)
print(filename + '下载完成')
num += 1
# 这里是猜测不同服务器里可能存有相同的视频, 所以一旦下载到视频就退出循环.
return

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

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

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

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

确保 Appium 服务已经启动.

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

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

Python爬虫-抖音小视频-mitmproxy与Appium的更多相关文章

  1. Python 爬虫——抖音App视频抓包

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

  2. python爬虫——抖音数据

    最近挺火的抖音短视频,不仅带火了一众主播,连不少做电商的也进驻其中,于是今天我来扒一扒这火的不要不要的抖音数据: 一.抓包工具获取用户ID 对于手机app数据,抓包是最直接也是最常见的手段,常用的抓包 ...

  3. python爬虫抖音 个人资料 仅供学习参考 切勿用于商业

    本文仅供学习参考 切勿用于商业 本次爬取使用fiddler+模拟器(下载抖音APP)+pycharm 1. 下载最新版本的fiddler(自行百度下载),以及相关配置 1.1.依次点击,菜单栏-Too ...

  4. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  5. Python爬虫---爬取抖音短视频

    目录 前言 抖音爬虫制作 选定网页 分析网页 提取id构造网址 拼接数据包链接 获取视频地址 下载视频 全部代码 实现结果 待解决的问题 前言 最近一直想要写一个抖音爬虫来批量下载抖音的短视频,但是经 ...

  6. 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家.. 1.楼主首先使用Fiddler4来抓取手机抖音app这 ...

  7. 教你用python爬取抖音app视频

    记录一下如何用python爬取app数据,本文以爬取抖音视频app为例. 编程工具:pycharm app抓包工具:mitmproxy app自动化工具:appium 运行环境:windows10 思 ...

  8. Python音视频开发:消除抖音短视频Logo的图形化工具实现

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...

  9. Python音视频开发:消除抖音短视频Logo和去电视台标

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 对于带Logo(如抖音Logo.电视台标)的视频,有三种方案进行Logo消除: 直接将对应区域用对应图像替换: 直接将对应区域模糊化: 通过变换将要 ...

随机推荐

  1. PJzhang:lijiejie的敏感目录爆破工具BBScan

    猫宁!!! 参考链接: https://www.freebuf.com/sectool/85729.html https://segmentfault.com/a/1190000014539449 这 ...

  2. Hexo瞎折腾系列(3) - 添加GitHub彩带和GitHub Corner

    页面右上角添加GitHub彩带 你可以在这里找到一共12种样式的GitHub彩带,复制其中的超链代码. 在themes\next\layout\_layout.swig目录下找到头部彩带相关的代码: ...

  3. Jmeter之Json Path Extractor 接受上一个请求的响应参数

    最近在使用Jmeter进行接口测试,被一个问题困扰了很久,就是第二个请求如何接收上一个请求响应中的参数,刚开始尝试着用网上普遍说的正则表达式,长了了N多次之,都没有达到我想要的效果,被整的够惨,于是, ...

  4. python之self本类对象

    不知道写点啥好,讲的都太绕了 似懂非懂,貌似懂了 以后再补充吧,视频day8_3中的20——60分钟那一部分

  5. 使用ansible对远程主机上的ssh公钥进行批量分发

    使用ansible对远程主机上的ssh公钥进行批量分发或者是删除修改操作 ansible内置了一个authorized_key模块,这个模块很好用,我们使用这个模块可以对远程 主机上的ssh公钥进行批 ...

  6. [CQOI2014]通配符匹配

    Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(""'),可以匹配0个及以上的任意字符:另一个 ...

  7. Broken BST CodeForces - 797D

    Broken BST CodeForces - 797D 题意:给定一棵任意的树,对树上所有结点的权值运行给定的算法(二叉查找树的查找算法)(treenode指根结点),问对于多少个权值这个算法会返回 ...

  8. hibernate Day1 案例代码

    1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ...

  9. RHEL 6.5----haproxy实现负载均衡

    主机名 IP master 192.168.30.130 node-1 192.168.30.131 node-2 192.168.30.132 在master上安装 [root@master ~]# ...

  10. 什么是极坐标? —— 一点微小的想法 What is Polar Coordinate ? - Some Naive Thoughts about It

    Can you answer these three questions? The answer seems to be trivial, since we can use our eyes to o ...