Python爬取某站视频--(只做学习使用)

1.准备ffmpeg并安装配置环境变量,主要使用其合成视频功能。

ffmpeg下载地址:windows版 免费下载地址https://download.csdn.net/download/qq_37247664/87799094?spm=1001.2014.3001.5501ghttps://download.csdn.net/download/qq_37247664/87799094?spm=1001.2014.3001.5501

                github地址:

Releases · BtbN/FFmpeg-Builds · GitHubContribute to BtbN/FFmpeg-Builds development by creating an account on GitHub.https://github.com/BtbN/FFmpeg-Builds/releases

配置环境变量

 

2.写python脚本模拟浏览器访问,下载视频。

"""
爬虫思路
(一)数据来源分析
    1、爬什么    某站视频(url也是静态的在源代码里面)、标题(一定在源代码里面)
    2、去哪儿爬
        静态的还是动态的
        静态!! 我在源代码里面搜索标题,发现有Json格式的数据 ==> json在Script标签中
        URL
        'https://www.bbb.com/video/BV1sv4y1J7E1/'
(二)爬虫代码实现
    1、发送请求
    2、获取数据
    3、解析数据
    4、保存数据
        发送请求
        获取数据
"""
import requests
import re
import json
import os   # 系统,让Python操作Windows


def get_html(url, headers):
    try:
        resp = requests.get(url=url, headers=headers)
        resp.encoding = 'utf-8'
        resp.raise_for_status()  # 自动触发崩溃
        return resp.text
    except:
        return ''


def parse_html(html):
    """
    解析数据有几种方法:
    1、解析(string --> object)
        json、xpath
    2、搜索(re正则)
        re
    """
    js_code = re.findall(r'<script>window.__playinfo__=(.*?)</script>', html, re.S)[0]
    js_dict = json.loads(js_code)

    # 解析视频的URL
    data = js_dict['data']
    dash = data['dash']
    video = dash['video']
    video_base_url = video[0]['base_url']

    # 解析音频的URL
    audio = dash['audio']
    audio_base_url = audio[0]['base_url']

    # 解析标题
    title = re.findall(r'<title.*?>(.*?)</title>', html, re.S)[0]

    data_dict = {
        'title': title,
        'video_base_url': video_base_url,
        'audio_base_url': audio_base_url,
    }

    return data_dict


def save_data(data, headers):
    # 如果没有文件夹我就创建一个(主视频文件夹)
    base_filename = './视频/'
    if not os.path.exists(base_filename):
        os.mkdir(base_filename)

    # # 发送请求获取数据
    video = get_content(url=data['video_base_url'], headers=headers)
    audio = get_content(url=data['audio_base_url'], headers=headers)

    # 创建目标视频文件夹
    filename = base_filename + f'{data["title"]}/'
    if not os.path.exists(filename):
        os.mkdir(filename)

    with open(filename + 'video.mp4', 'wb') as f:
        f.write(video)

    with open(filename + 'audio.mp3', 'wb') as f:
        f.write(audio)

    combine(filename)


def get_content(url, headers):

    try:
        resp = requests.get(url=url, headers=headers)
        resp.raise_for_status()
        return resp.content  # 二进制数据, text 文本数据, json() json数据
    except:
        return None


def combine(filename):
    # os.system()
    """
    功能:让Python执行cmd命令
    参数:命令字符串
    返回:无
    """
    os.system(f'ffmpeg -i {filename}video.mp4 -i {filename}audio.mp3 -c:v copy -c:a aac -strict experimental {filename}output.mp4')


def main():
    url = input("请输入视频地址")
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48',
        'referer': 'https://www.bilibili.com/',
    }
    html = get_html(url, headers)

    if not html:
        print('获取失败')

    data = parse_html(html)

    if not data:
        print('解析失败')

    save_data(data, headers)


if __name__ == '__main__':
    main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值