前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python爬虫】“每天一遍,防止早恋”?B站高颜值美女视频采集

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

作者头像
松鼠爱吃饼干
修改2021-11-16 12:04:00
6380
修改2021-11-16 12:04:00
举报
文章被收录于专栏:Python分享Python分享

前言

众所周知,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,在数据包里找到我们所需要的数据

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

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

开始代码

导入模块

代码语言:javascript
复制
import requests  # 数据请求模块  pip install requests
import re  # re正则表达式 提取数据
import subprocess # 子进程
import os # 文件操作的模块

请求数据

代码语言:javascript
复制
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

获取视频标题

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

保存数据

代码语言:javascript
复制
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, '视频保存完成')

数据的合并

代码语言:javascript
复制
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')

实现效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松鼠爱吃饼干 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境
  • 模块使用:
  • 思路流程
  • 分析网站
  • 开始代码
    • 导入模块
      • 请求数据
        • 获取视频标题
          • 获取 音频数据 以及 视频数据
            • 保存数据
              • 数据的合并
                • 实现效果
                相关产品与服务
                云开发 CLI 工具
                云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档