video

该博客介绍了一个Python脚本,用于从B站(哔哩哔哩)获取视频的BV号,并下载视频及其音频。脚本首先伪装请求头以防止防盗链,然后解析HTML获取视频标题和播放信息。接着,它提取音频和视频的URL,将数据保存为.mp3和.mp4文件。最后,用户可以通过输入BV号运行脚本来下载所需视频。
摘要由CSDN通过智能技术生成
import requests,re
import json
from pprint import pprint

#定义一个函数用来获取响应的内容
def get_response(html_url):
    '''
    该函数主要用来获取网站响应的内容
    :param html_url: 目标网址
    :return: 目标网址返回的响应内容
    '''

    #加上请求头伪装
    #加上防盗链,用于告诉浏览器去哪里找到该网址
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36',
        'referer': 'https://www.bilibili.com'
    }

    response = requests.get(url=html_url,headers=header)
    return response
    # print(response)

#定义一个函数获取视频内的相关信息
def get_video_info(html_url):
    '''
    该函数用来获取视频的标题、音频、视频
    :param html_url: 目标网址
    :return: 标题、音频、视频
    '''

    response = requests.get(url=html_url)
    #打印出视频的源码
    # print(response.text)

    #解析获取视频的中文名称
    title = re.findall('<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>',response.text)[0]
    # print(title)

    #解析视频中的音频数据
    html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response.text)[0]
    # print(html_data)

    # 此时需要将返回的数据转换成字典的格式
    json_data = json.loads(html_data)
    # print(json_data)

    #为了让格式更加好看和辨认,使用pprint
    # pprint(json_data)

    #开始拿音频和视频的数据
    audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
    # print(audio_url)
    video_url = json_data['data']['dash']['video'][0]['baseUrl']
    # print(video_url)

    # 将响应的数据通过返回值进行返回
    video_info = [title,audio_url,video_url]
    return video_info

# 定义一个存储数据的函数
def save_info(title,audio_url,video_url):
    '''
    该函数是用来存储数据的
    :param title: 标题
    :param audio_url:音频网址
    :param video_url: 视频网址
    :return:
    '''
    audio_content = get_response(html_url=audio_url).content
    video_content = get_response(html_url=video_url).content

    #创建文件用来保存数据
    with open(title+'.mp3','wb') as file:
        file.write(audio_content)
    with open(title+'.mp4','wb')as file:
        file.write(video_content)

# 定义一个主函数将所有函数合并起来使用
def main(bv_id):
    '''
    将所有的函数并在一起使用
    :param bv_id: 输入视频的bv_id
    :return:
    '''
    url = f'https://www.bilibili.com/video/{bv_id}'
    video_info = get_video_info(url)
    save_info(video_info[0],video_info[1],video_info[2])


keyword =input('请输入您要爬取视频的bv_id:')
main(keyword)

#测试:BV1yu411D7u1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值