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中,我们可以通过比较简单的方法来实现这个功能。 下面我们将分别讲解如何获取今天、昨天、明天的时间戳。 获取今天时间戳 PHP中的time()函数可以获取当前时间的时间戳,我们只需要把当天的0点0分的时间…

    PHP 2023年5月26日
    00
  • PHP编程中的Session阻塞问题与解决方法分析

    PHP编程中的Session阻塞问题与解决方法分析 什么是Session阻塞问题 在基于Web的应用程序中,服务器需要保持一些用户相关的状态信息,这些信息可以被存储在Session中。然而,PHP编程中存在一种问题,称为Session阻塞问题,当一个用户正在执行需要较长时间处理的请求时,其他用户将无法访问该站点上的其他页面,直到这个请求完成。 这是因为PHP…

    PHP 2023年5月27日
    00
  • PHP实现导出带样式的Excel

    接下来我会详细讲解“PHP实现导出带样式的Excel”的完整攻略。 一、背景介绍 在实际的开发工作中,我们常常需要使用到Excel表格,然而PHP并没有内置的类或函数可以直接导出带样式的Excel,因此我们需要借助一些第三方工具来实现。 二、选择合适的第三方工具 市场上有很多第三方工具可以帮助我们实现导出Excel的功能,例如PHPExcel、PhpSpre…

    PHP 2023年5月26日
    00
  • PHP substr()函数参数解释及用法讲解

    PHP substr()函数参数解释及用法讲解 substr()函数介绍 substr()函数是PHP中用于截取字符串的函数。该函数的作用是截取一个字符串中的一部分,并返回截取后的结果。substr()函数的语法如下: substr(string $string, int $start, int $length = ?): string substr()函数…

    PHP 2023年5月26日
    00
  • 分享十款最出色的PHP安全开发库中文详细介绍

    针对分享“分享十款最出色的PHP安全开发库中文详细介绍”的完整攻略,我来进行详细讲解。 一、介绍 PHP安全开发库是一些常用的PHP代码库,用来实现对面向Web的应用程序进行安全开发和健壮性编程。PHP安全开发库中精选出10个最出色的,是可以帮助开发者最大程度保障代码的安全性和健壮性的库。 二、PHP安全开发库 下面是十款最出色的PHP安全开发库: PHPI…

    PHP 2023年5月23日
    00
  • PHP字符串 ==比较运算符的副作用

    下面是关于“PHP字符串 ==比较运算符的副作用”的完整攻略: 什么是“字符串 ==比较运算符的副作用” 在PHP中,有两种比较运算符:==和===。其中,==是非严格相等运算符,用于比较两个变量的值是否相等;而===是严格相等运算符,除了值相等,还要求类型也必须相同。 然而,当使用==比较两个字符串时,会出现一些副作用。具体来说,==会把两个字符串转换为数…

    PHP 2023年5月26日
    00
  • 微信怎么打开麦克风权限?微信打开麦克风权限教程

    当你在微信中使用语音消息、视频通话、语音电话等功能时,需要打开麦克风权限。如果你的微信麦克风权限没有打开,将无法正常使用这些功能。下面是微信打开麦克风权限的教程: 打开麦克风权限 1. iOS系统 打开手机设置 -> 隐私 -> 麦克风; 找到微信,将其麦克风权限打开。 例如,iOS14系统中,具体操作步骤如下: 打开手机 设置; 选择 隐私; …

    PHP 2023年5月30日
    00
  • PHP数组传递是值传递而非引用传递概念纠正

    首先,我们需要了解PHP中的变量传递方式,其中,基本类型变量(如字符串、整型、布尔型等)是传值的,而对象和数组则是传引用的。由于数组既可以包含基本变量类型,又可以包含对象,因此对于数组变量的传递方式其实是有所不同的。 对于PHP中的数组变量,虽然其值传递时是通过复制数组变量的值来完成的,但其中包含的如果是对象类型,在此过程中也是传递引用的(因为PHP中的对象…

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