python爬虫-爬取B站视频,原来爬取B站视频如此简单

内容摘要
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
文章正文

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

一、前言

B站是国内知名的视频弹幕网站,有最及时的动漫新番,ACG氛围,最有创意的Up主。站点中的视频数据分成了视频画面和音频数据。
今天带大家下载以及合并B站的视频。

二、所用到得库

import requests
import re  # 正则表达式
import pprint
import json
import subprocess

 

三、环境配置

python 3.6
pycharm
requests
re
json
subprocess

四、爬取视频及音频代码

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"}


def send_request(url):
    """请求数据"""
    response = requests.get(url=url, headers=headers)
    return response


def get_video_data(html_data):
    """解析视频数据"""

    # 提取视频的标题
    title = re.findall("<span class="tit">(.*?)</span>", html_data)[0]
    # print(title)

    # 提取视频对应的json数据
    json_data = re.findall("<script>window.__playinfo__=(.*?)</script>", html_data)[0]
    # print(json_data)  # json_data 字符串
    json_data = json.loads(json_data)
    pprint.pprint(json_data)

    # 提取音频的url地址
    audio_url = json_data["data"]["dash"]["audio"][0]["backupUrl"][0]
    print("解析到的音频地址:", audio_url)

    # 提取视频画面的url地址
    video_url = json_data["data"]["dash"]["video"][0]["backupUrl"][0]
    print("解析到的视频地址:", video_url)

    video_data = [title, audio_url, video_url]
    return video_data


def save_data(file_name, audio_url, video_url):
    # 请求数据
    print("正在请求音频数据")
    audio_data = send_request(audio_url).content
    print("正在请求视频数据")
    video_data = send_request(video_url).content
    with open(file_name + ".mp3", mode="wb") as f:
        f.write(audio_data)
        print("正在保存音频数据")
    with open(file_name + ".mp4", mode="wb") as f:
        f.write(video_data)
        print("正在保存视频数据")

 

五、数据合并:

def merge_data(video_name):
    """数据的合并"""
    print("视频合成开始:", video_name)
    # ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
    COMMAND = f"ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental output.mp4"
    subprocess.Popen(COMMAND, shell=True)
    print("视频合成结束:", video_name)


html_data = send_request("https://www.bilibili.com/video/BV1Sa4y1H7cy").text
# print(html_data)

video_data = get_video_data(html_data)

save_data(video_data[0], video_data[1], video_data[2])

merge_data(video_data[0])

 

代码注释
[!--zhushi--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!