Python爬虫之App爬虫视频下载的实现

下面我就对“Python爬虫之App爬虫视频下载的实现”的完整攻略进行详细讲解:

目标

本文的目标是实现爬取App中的视频,并进行下载保存。具体包括以下几个步骤:

  1. 获取App中的视频链接
  2. 根据链接获取视频的下载地址
  3. 下载保存视频

步骤

步骤一:获取App中的视频链接

首先需要抓取App中的视频链接。这里以“抖音”App为例,使用mitmproxy进行抓包分析。具体步骤如下:

  1. 启动mitmproxy,并配置代理。
mitmproxy -p 8888
  1. 使用手机连接同一Wi-Fi网络,并设置代理为mitmproxy所在IP及端口号。
  2. 打开抖音App,浏览视频列表,选则要下载的视频。
  3. 在mitmproxy中找到该视频请求,抓取其中的参数信息,包括用户id、aweme_id和数据接口地址。

例如:

aweme_id=1234567&device_id=1234567890&iid=1234567890&channel=App Store&aid=1128&app_name=aweme&version_code=8.1.0&version_name=8.1.0&device_platform=iphone&ssmix=a&device_type=iPhone%206&os_api=12&os_version=12.1.2&screen_width=640&vid=&device_brand=Apple&app_language=zh-Hans&ac=WIFI&update_version_code=8101&openudid=1234567890123456789012345678901234567890&item_ids=123

其中,数据接口地址为:

https://aweme.snssdk.com/aweme/v1/aweme/detail
  1. 从抓取到的参数中,构造请求数据,并向数据接口地址发送请求,获取视频的基本信息。

例如:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16C101 douyin/8.1.0 WangXin/1.0.0 NetType/WIFI',
    'Cookie': '',
    'Referer': ''
}

data = {
    'aweme_id': '1234567',
    'device_id': '1234567890',
    'iid': '1234567890',
    'channel': 'App Store',
    'aid': '1128',
    'app_name': 'aweme',
    'version_code': '8.1.0',
    'version_name': '8.1.0',
    'device_platform': 'iphone',
    'ssmix': 'a',
    'device_type': 'iPhone 6',
    'os_api': '12',
    'os_version': '12.1.2',
    'screen_width': '640',
    'vid': '',
    'device_brand': 'Apple',
    'app_language': 'zh-Hans',
    'ac': 'WIFI',
    'update_version_code': '8101',
    'openudid': '1234567890123456789012345678901234567890',
    'item_ids': '123'
}

response = requests.post('https://aweme.snssdk.com/aweme/v1/aweme/detail', headers=headers, data=data)
video_url = response.json()['aweme_detail']['video']['play_addr']['url_list'][0]

通过解析返回的数据,获取到视频的播放链接。这个链接是短链接,需要进一步转换为长链接才能下载。

步骤二:根据链接获取视频的下载地址

根据视频播放链接,可以使用Python requests库向该链接发送请求,返回的数据中包含了视频的下载地址。代码示例如下:

def get_video_download_url(video_url):
    response = requests.head(video_url, allow_redirects=True)
    return response.url

其中,在requests.head方法中,添加了allow_redirects=True参数,使得可以自动跟随重定向,最终获取到视频的下载地址。

步骤三:下载保存视频

最后一步是使用Python自带的urllib库进行视频下载。具体代码如下:

import urllib

def download_video(video_url, save_path):
    urllib.request.urlretrieve(video_url, save_path)

其中,video_url即为上一步获取到的视频下载地址,save_path则为保存视频的路径。

示例说明

  1. 抓取B站App中的视频并下载

通过抓包分析,可以获取到B站App中视频播放的地址。其格式为:

https://upos-hz-mirrorakam.akamaized.net/upgcxcode/12/92/166082912/166082912-1-16.mp4?type=cdn七牛

使用步骤二中的方法,可以获取到该地址的下载链接。然后,使用步骤三中的方法,将视频下载和保存到本地。

完整代码如下:

import requests
import urllib

# 获取视频下载地址
def get_video_download_url(video_url):
    response = requests.head(video_url, allow_redirects=True)
    return response.url

# 下载视频
def download_video(video_url, save_path):
    urllib.request.urlretrieve(video_url, save_path)

# B站App视频抓取示例
video_url = 'https://upos-hz-mirrorakam.akamaized.net/upgcxcode/12/92/166082912/166082912-1-16.mp4?type=cdn七牛'
download_url = get_video_download_url(video_url)
save_path = 'video_save_path.mp4'
download_video(download_url, save_path)
  1. 抓取抖音App中的视频并下载

抖音App中的视频播放链接与B站有所不同,需要使用步骤一中的方法获取视频链接信息。具体步骤已经在前面讲解过了。在此不再赘述。

完整代码如下:

import requests
import urllib

# 获取视频播放链接
def get_video_play_url():
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16C101 douyin/8.1.0 WangXin/1.0.0 NetType/WIFI',
        'Cookie': '',
        'Referer': ''
    }

    data = {
        'aweme_id': '1234567',
        'device_id': '1234567890',
        'iid': '1234567890',
        'channel': 'App Store',
        'aid': '1128',
        'app_name': 'aweme',
        'version_code': '8.1.0',
        'version_name': '8.1.0',
        'device_platform': 'iphone',
        'ssmix': 'a',
        'device_type': 'iPhone 6',
        'os_api': '12',
        'os_version': '12.1.2',
        'screen_width': '640',
        'vid': '',
        'device_brand': 'Apple',
        'app_language': 'zh-Hans',
        'ac': 'WIFI',
        'update_version_code': '8101',
        'openudid': '1234567890123456789012345678901234567890',
        'item_ids': '123'
    }

    response = requests.post('https://aweme.snssdk.com/aweme/v1/aweme/detail', headers=headers, data=data)
    return response.json()['aweme_detail']['video']['play_addr']['url_list'][0]

# 获取视频下载地址
def get_video_download_url(video_url):
    response = requests.head(video_url, allow_redirects=True)
    return response.url

# 下载视频
def download_video(video_url, save_path):
    urllib.request.urlretrieve(video_url, save_path)

# 抖音App视频抓取示例
video_url = get_video_play_url()
download_url = get_video_download_url(video_url)
save_path = 'video_save_path.mp4'
download_video(download_url, save_path)

以上就是“Python爬虫之App爬虫视频下载的实现”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫之App爬虫视频下载的实现 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • PHP实现事件机制实例分析

    下面就为大家分享一下“PHP实现事件机制实例分析”的完整攻略。在这里,我们将讲解以下几个方面: 什么是事件机制? 为什么要使用事件机制? PHP如何实现事件机制? 事件机制的实例分析 1. 什么是事件机制? 事件机制是指程序在特定情况下,通过监听和回调函数的方式来触发一系列和这个事件相关的操作。 在事件机制中,存在三个主要的角色:事件源、事件以及监听器。 事…

    PHP 2023年5月27日
    00
  • 如何在PHP中使用数组

    当我们需要在PHP中存储多个值时,数组是一个非常有用的数据结构。本文将详细讲解如何在PHP中使用数组,包括数组的定义、访问和操作,以及数组的一些常用函数。 定义数组 在PHP中,我们可以使用关键字array()来定义一个数组。数组可以包含任意数量的元素,每个元素可以存储任意类型的数据,例如字符串、数字、其他数组等等。 以下是一个定义包含三个元素的数组的示例:…

    PHP 2023年5月26日
    00
  • 易语言调用JS取随机数

    一、前言 在网页中,经常要使用随机数,能够让网页的效果更加随机化,增加趣味性。而在使用易语言编写的网页中,如果需要生成随机数,可以使用JS脚本来实现。下面就为大家介绍如何使用易语言调用JS取随机数。 二、步骤 1.在易语言代码中,可以直接调用浏览器中的javascript脚本。于是,我们可以调用Math库中的random()方法来获取随机数。具体语法如下: …

    PHP 2023年5月27日
    00
  • 5种PHP创建数组的实例代码分享

    标题:PHP创建数组的实例代码分享 介绍 在PHP中,数组是一种用于存储大量数据的重要数据类型,它可以将多个数据放在一个变量中进行管理。创建数组是使用PHP进行编程的基础之一,在PHP中,我们可以使用多种方法来创建数组。本文将分享5种PHP创建数组的实例代码,通过这些实例代码,您将更好地理解PHP中的数组类型,并能够在实际工作中更好地运用它们。 代码 1. …

    PHP 2023年5月23日
    00
  • php array_slice函数的使用以及参数详解

    PHP array_slice 函数的使用以及参数详解 在 PHP 中,array_slice 函数可以用来获取数组的一部分,并返回这部分内容的新数组。 基本语法 array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array 参数…

    PHP 2023年5月26日
    00
  • PHP实现递归的三种方法

    下面就来详细讲解“PHP实现递归的三种方法”的攻略: 一、什么是递归 递归是一种解决问题的方法,它把一个问题分解为两种情况:基线条件和递归条件。函数直到遇到基线条件才会停止递归。 二、PHP实现递归的三种方法 2.1 for循环递归 使用for循环实现递归有点像迭代,只是需要在函数内部再次调用自己,直到到达终止条件为止。 function my_recurs…

    PHP 2023年5月23日
    00
  • PHP开发环境配置(MySQL数据库安装图文教程)

    关于 PHP 开发环境配置以及 MySQL 数据库安装,我提供如下详细的攻略: 环境准备 在安装 PHP 开发环境之前,需要先安装一个 Web 服务器来作为 PHP 的运行环境,这里以 Apache 服务器为例。 下载 Apache 服务器:前往 Apache 官网 下载最新的 Apache 版本。 安装 Apache 服务器:双击安装包,按照安装提示一步一…

    PHP 2023年5月30日
    00
  • 一寸照片的尺寸是多大?常用标准照片尺寸详情汇总介绍

    一、什么是一寸照片?一寸照片的尺寸是多大? 一寸照片是指照片的尺寸,也就是照片的长和宽。一寸照片的尺寸是25mm×35mm,这个尺寸是按照国际标准来制定的。对于需要用一寸照片的场景,一般来说都是需要按照这个标准来规定尺寸的。 二、常用标准照片尺寸详情汇总介绍 除了一寸照片,还有很多其他常用的照片尺寸。下面是一些常用的标准照片尺寸详情汇总: 二寸照片 二寸照片…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部