爬虫下载B站视频全过程

一、下载的基本思路

1、数据来源分析

鼠标右键点击查看网页源代码,ctrl +F 搜索playinfo 可以找到相应的数据内容

  • 以一个越野视频为例
    url = https://www.bilibili.com/video/BV1eg411N7GS/

在这里插入图片描述

2、代码实现步骤

(基本四大步骤)
(1)发送请求,模拟浏览器对于视频详情页url地址发送请求 https://www.bilibili.com/video/BV1eg411N7GS/

在这里插入图片描述出现<Response [200]>,表示请求成功
在这里插入图片描述

(2)获取数据,获取服务器返回响应数据 网页源代码
在这里插入图片描述

(3)解析数据,提取我们想要数据类型 视频标题以及视频基本信息 url

  • 正则表达式 对于字符串数据类型进行提取、解析,打开源码,Ctrl+F 输入对于视频名称,找到所在位置
    在这里插入图片描述*获取视频数据信息 前端标签两个两个一起
    在这里插入图片描述打开源码界面,ctrl+F 输入playinfo
    在这里插入图片描述

  • 字符串数据转成json字典数据类型
    在这里插入图片描述* 音频audio和视频video分开储存
    在这里插入图片描述在这里插入图片描述

  • 文件地址取出来
    在这里插入图片描述

(4)保存数据,保存本地

  • 没有访问权限,加防盗链

在这里插入图片描述

  • 导入import os 和import subprocess

在这里插入图片描述

二、视频下载源代码

import json
import requests
import re #导入正则
import os
import subprocess
from pprint import pprint #导入格式输出模块

#确定请求url地址
base_url = 'https://www.bilibili.com/video/BV1eg411N7GS/'
#把python代码伪装成浏览器  在开发者工具里面直接粘贴
headers = {
    #防盗链
    "referer":"https://www.bilibili.com/video/",

    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"

}
#发送请求
response = requests.get(base_url, headers=headers)
#获取数据,获取服务器返回响应数据 --文本数据
#print(response.text)
#解析数据,提取我们想要数据内容
   #正则表达式   对于字符串数据类型进行提取、解析
   #从response.text里面去找 "title":"(.*?)",”pubdata“
title = re.findall('"title":"(.*?)","pubdate"',response.text)[0]
#获取视频数据信息  前端标签两个两个一起
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response.text)[0]
#转换数据类型 字符串数据转成json字典数据类型
json_data=json.loads(html_data)  #导入import json
#print(title)
#print(json_data)
#pprint(json_data)
#字典数据 B站数据 音频和视频分开的
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']

video_url = json_data['data']['dash']['video'][0]['baseUrl']
print(title)
print(audio_url)
print(video_url)
#链接没有访问权限
#保存视频
audio_data = requests.get(audio_url, headers=headers).content #二进制格式
with open(f'{title}.mp3', mode='wb') as f:
    f.write(audio_data)
video_data = requests.get(video_url, headers=headers).content
with open(f'{title}.mp4', mode='wb') as f:
    f.write(video_data)

ffmpeg = f'ffmpeg -i {title}.mp4 -i {title}.mp3 -acodec copy -vcodec copy {title+"-out.mp4"}'
subprocess.run(ffmpeg)

os.remove(f'{title}.mp4')
os.remove(f'{title}.mp3')
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值