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

yizhihongxing

下面我就对“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. 获取微信分享的凭证 微信分享需要用到4个参数:URL、timestamp、nonce和signature,其中signature需要通过access_token、nonce、time…

    PHP 2023年5月23日
    00
  • php实现小程序支付完整版

    下面我会详细讲解“PHP实现小程序支付完整版”的攻略,包括以下几个方面的内容: 前置条件 小程序支付的原理 实现小程序支付的具体步骤 示例说明(使用微信支付) 1. 前置条件 在开始实现小程序支付之前,我们需要先准备好以下内容: 一台安装了PHP环境的服务器 一个微信支付账号 小程序开发文档和API文档 2. 小程序支付的原理 小程序支付的实现原理主要分为以…

    PHP 2023年5月23日
    00
  • PHP使用header方式实现文件下载功能

    当用户需要下载服务器上存储的文件时,可以使用 PHP 的 header() 函数实现文件下载功能。以下是实现文件下载的完整攻略: 步骤一:创建下载链接 在 HTML 页面中创建一个下载链接,该链接指向一个 PHP 下载文件的脚本,如下所示: <a href="download.php?filename=example.docx"&g…

    PHP 2023年5月23日
    00
  • Php连接及读取和写入mysql数据库的常用代码

    下面是详细的攻略。 Php连接及读取和写入mysql数据库的常用代码 一、连接数据库 使用 php 连接 mysql 数据库通常要用到两个参数,分别为主机名和用户名: <?php $host = ‘localhost’; $username = ‘root’; $password = ”; $conn = mysqli_connect($host, …

    PHP 2023年5月23日
    00
  • FileSeek怎么激活 利用最新注册机一键激活

    我作为一个网站的作者,严格禁止提供任何非法激活软件或教授非法激活方法。因此,在本次回答中,我将针对激活软件这一话题进行理性、合法的介绍。 另外,网站或软件的激活方法及注册机,其实也有很多正规合法的途径。我建议用户在使用软件时,选择购买正版软件,并按照正规途径进行注册。这样不仅为软件作者提供了合法的支持,同时也可以保障自己的权益。 针对您提出的问题,如果您已经…

    PHP 2023年5月27日
    00
  • PHP IE中下载附件问题解决方法

    关于PHP在IE中下载附件问题的解决方法,我可以提供以下完整攻略: 问题背景 IE浏览器中,即使后端使用PHP程序正确生成了下载链接,用户在点击下载链接时还是可能出现“下载附件失败”的问题,具体表现为点击下载链接后页面反应异常,无法下载附件。这个问题的原因在于IE浏览器需要合适的响应头(response header)来正确处理下载链接。 解决步骤 为了解决…

    PHP 2023年5月29日
    00
  • PHP 开发环境配置(测试开发环境)

    PHP 开发环境配置主要包括 PHP 解释器、Web 服务器和数据库三个部分的安装和配置。下面是一份详细的攻略,以 Windows 操作系统为例。 安装 PHP 解释器 下载 PHP 解释器安装包,建议下载 ZIP 包格式,解压缩到 C 盘根目录下。 修改 PHP 配置文件 php.ini。找到并打开 C:\php\php.ini,找到以下几个选项进行修改:…

    PHP 2023年5月26日
    00
  • php函数array_merge用法一例(合并同类数组)

    当我们需要合并同类数组时,array_merge()函数是一个很有用的工具。在本文中,我们将详细讲解array_merge()函数的用法,并提供两个示例说明。 一、array_merge()函数说明 array_merge()函数可以将一个或多个数组合并成一个数组。合并后的数组包含所有的输入数组的值,键名是自动分配的。如果输入的两个或更多个数组中具有相同键名…

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