Python采集视频数据,下载流媒体m3u8格式

前言

嗨喽!大家好,这里是魔王~

本次目的:

Python采集网站视频,下载流媒体m3u8格式视频
在这里插入图片描述

模块使用:

  • requests >>> pip install requests (数据请求 第三方模块)
  • re # 正则表达式 去匹配提取数据
  • json

开发环境:

  • Python 3.8 解释器
  • Pycharm 2021.2 版本 建议

win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源

爬虫实现流程思路:

一. 数据来源分析

  1. 确定目标网站 >>> 爬取网址是什么 数据是什么
  2. 通过开发者工具进行抓包分析

采集视频

  1. 先看network下面 media(媒体文件包含视频数据或者音频数据) [如果没有数据]
  2. 通过数据包数据慢慢分析

如果说url里面包含 ts 后缀 >>> 视频片段 >>> m3u8视频格式 (有专门m3u8文件保存所有ts文件内容)

m3u8 就是把一个整体视频, 分割成很多视频小片段 一个片段只有几秒时间…
(可以更好缓存, 你看多少,他就给加载多少, 减少服务器压力)

通过上述分析可以知道 只需要获取m3u8文件, 可以获取所有ts视频片段…

Python采集视频数据,下载流媒体m3u8格式_第1张图片

二. 代码实现步骤: 发送请求 获取数据 解析数据 保存数据

第一次请求
  1. 发送请求, 对于视频详情页页面发送请求
  2. 获取数据, 获取网页源代码
  3. 解析数据, 提取我们想要数据内容 视频信息
第二次请求:
  1. 发送请求, 对于m3u8 url地址发送请求
  2. 获取数据, 获取返回ts文件内容
  3. 解析数据, 提取所有ts文件

保存数据, 把视频内容保存本地, 把视频片段合成为一个完整视频
在这里插入图片描述

开始我们得代码

导入模块

# 导入数据请求模块
import requests  # 第三方模块 pip install requests
# 导入正则
import re   # 内置模块 不需要安装
# 导入json
import json     # 内置模块 不需要安装
# 导入格式化输出模块
import pprint    # 内置模块 不需要安装

全部代码

for page in range(8, 17):
    # 获取一页视频ID
    url = '网址'
    data = {
        'quickViewId': 'ac-space-video-list',
        'reqID': '1',
        'ajaxpipe': '1',
        'type': 'video',
        'order': 'newest',
        'page': page,
        'pageSize': '20',
        't': '1648129818743',
    }
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
    }
    response_1 = requests.get(url=url, params=data, headers=headers)
    video_ids = re.findall('ac(\d+)', response_1.text)
    for video_id in video_ids:
        """
        1. 发送请求, 对于视频详情页页面发送请求 https://www.acfun.cn/v/ac34063499
            I. 确定请求网址
            II. 确定请求方式
            III. 如何实现伪装 如何防止被反爬 user-agent: 用户代理 表示浏览器基本身份信息
                在开发者工具里面直接复制
        等号左边都是自定义变量 (见名知意)
        """
        url = f'https://www.acfun.cn/v/ac{video_id}'
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
        }
        # 通过requests这个模块里面get请求方式, 对于url地址发送请求, 并且携带上headers请求头, 最后用自定义变量response接收返回数据
        response = requests.get(url=url, headers=headers)  #   表示对象 200状态码表示请求成功
        # 2. 获取数据, 获取网页源代码 response.text 获取响应文本数据(字符串数据)
        # print(response.text)
        """
        3. 解析数据, 提取我们想要数据内容 视频信息
            正则表达式 可以直接对于字符串数据进行提取解析
        re.findall() 找到所有, 找数据 >>> 找什么样数据, 从哪里找数据
        防止有一种情况, 我们想要数据中间, 突然出现一个分号
        css 根据标签属性内容提取数据
        xpath 根据标签节点提取数据
        re 直接提取字符串数据
        """
        html_data = re.findall('window.pageInfo = window.videoInfo = (.*)', response.text)[0].replace(';', '')
        json_data = json.loads(html_data)
        # print(json_data)
        # pprint.pprint(json_data)
        # json_data 字典数据类型, 就可以根据键值对取值 根据冒号左边的内容(键) 提取冒号右边的内容(值)
        title = json_data['title']  # 提取视频标题
        m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
        m3u8_data = requests.get(url=m3u8_url, headers=headers).text
        # print(m3u8_data)
        m3u8_data = re.sub('#E.*', '', m3u8_data).split()  # split() 字符串分割 返回列表数据
        for ts in m3u8_data:
            ts_url = '/'.join(m3u8_url.split('/')[:-1]) + '/' + ts
            print(ts_url)
            # ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + ts
            # ts_url_1 = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts
            # https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/
            ts_content = requests.get(url=ts_url, headers=headers).content
            # ab 以二进制数据追加保存不会覆盖 wb 二进制数据保存 会覆盖
            with open(title + '.mp4', mode='ab') as f:  # as
                f.write(ts_content)
        print(title, '视频保存成功', url)

更多资源、解答可点击

【python】采集优质阿婆主全部视频~下载流媒体m3u8格式

尾语

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

你可能感兴趣的:(爬虫,python,数据分析,数据挖掘)