美文网首页Python爬虫案例分享
【Python爬虫】“每天一遍,防止早恋”?B站高颜值美女视频采

【Python爬虫】“每天一遍,防止早恋”?B站高颜值美女视频采

作者: Python案例教学 | 来源:发表于2021-11-05 15:25 被阅读0次

前言

众所周知,B站是一款听歌软件,上卖有很多修复过的4K超清歌曲MV。除了听歌外,还有一些UP主发布的剪辑视频、素材视频等,都在上面说了分享素材。

可是,B站的视频下载很麻烦,很多人只知道可以保存在手机的APP里面,不知道怎么保存到本地。以前我写过爬B站视频的,B站是视频和声音分离的,需要用到ffmpeg合成工具才行

不过,最近有同学问我,用我之前分享的方法下载不了bilibili站的视频资源啊,然后我自己试了下,果然,它更新了!


下面是2021年11月最新的一个下载方法

环境

  • python 3.8
  • pycharm

模块使用:

  • requests >>> pip install requests
  • re
  • subprocess

思路流程

首先要获取那些东西, 最后才能得到 我想视频数据和音频数据

  1. bv号 >>> 自己传入视频的BV号
  2. 保存音频 视频数据内容 需要视频标题
  3. cid session 参数
  4. 最后才去提取想要音频url地址和视频的url地址
  5. 合并音频和视频

分析网站

可以在开发者工具里搜索playurl,在数据包里找到我们所需要的数据

这两个就是我们所需要的视频数据和音频数据



视频的请求参数,下面会用到


开始代码

导入模块

import requests  # 数据请求模块  pip install requests
import re  # re正则表达式 提取数据
import subprocess # 子进程
import os # 文件操作的模块

请求数据

headers = {
    'referer': 'https://www.bilibili.com/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'
}


def get_response(html_url):
    response = requests.get(url=html_url, headers=headers)
    return response

获取视频标题

def get_video_info(html_url):
    html_data = get_response(html_url).text
    title = re.findall('<h1 title="(.*?)" class="video-title">', html_data)[0]
    cid = re.findall('"cid":(\d+),', html_data)[0]
    session = re.findall('"session":"(.*?)"', html_data)[0]
    video_info = [cid, session, title]
    return video_info

获取 音频数据 以及 视频数据

def get_video_content(bv_id, cid, session):
    index_url = 'https://api.bilibili.com/x/player/playurl'
    data = {
        'cid': cid,
        'qn': '32',
        'type': '',
        'otype': 'json',
        'fourk': '1',
        'bvid': bv_id,
        'fnver': '0',
        'fnval': '976',
        'session': session,
    }
    json_data = requests.get(url=index_url, params=data, headers=headers).json()
    # 通过字典键值对方法 取内容, 就根据冒号左边内容 提取冒号右边的内容
    audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
    video_url = json_data['data']['dash']['video'][0]['baseUrl']
    video_content = [audio_url, video_url]
    return video_content

保存数据

def save(title, audio_url, video_url):
    # response.text 获取响应体的文本数据 (一般网页源代码) 返回数据类型 字符串
    # response.content 获取响应体的二进制数据 (保存图片/音频/视频/特定格式文件) 二进制数据内容
    # response.json() 获取响应体的json字典数据 字典数据类型
    audio_content = get_response(audio_url).content
    video_content = get_response(video_url).content
    with open(title + '.mp3', mode='wb') as f:
        f.write(audio_content)
    with open(title + '.mp4', mode='wb') as f:
        f.write(video_content)
    print(title, '视频保存完成')

数据的合并

def merge_data(video_name):
    print('视频合成开始:', video_name)
    cmd = f"ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}output.mp4"
    # print(cmd)
    subprocess.run(cmd, shell=True)
    print('视频合成结束:', video_name)
    os.remove(f'{video_name}.mp4')
    os.remove(f'{video_name}.mp3')

实现效果



相关文章

网友评论

    本文标题:【Python爬虫】“每天一遍,防止早恋”?B站高颜值美女视频采

    本文链接:https://www.haomeiwen.com/subject/wolkzltx.html