『源码教程』【python】B站音频提取

声明

本源码教程仅供学习交流,请勿用于非法或商业用途,否则后果自负

正文

此源码教程只包含B站带有BV号的普通视频

思路大概就是分析音频的数据流的位置,模拟发包,得到返回的数据流再写入文件即可

1.我们先随便打开一个bv视频,抓下它的包,搜索含音频的英文"audio"的包

2.一般情况默认先看网站源代码的包

3.试着在它的返回的代码里搜索"audio"

4.我们发现有不少地方带有"audio",结合上下文(此处为了方便查看,我把代码放进记事本里了)

一串json数据,audio分支里有一些的url,结合上面带有"video"分支也有一些url,这里可能就是数据流

可以试着把链接拿出来访问一下

5.访问这连接的时候最好用会话session来使用,因为我们是要进去视频网页里提取它的链接,而使用会话它会记录你整个的访问信息。

也就是说你访问第一次后,第二次访问它会保存第一次的信息,比如cookie之类的

#访问视频页面,获取源代码
from requests import session
url = 'https://www.bilibili.com/video/BV1gK4y1o7dH'
session = session()
html = session.get(url).text

这些链接被外包在json数据里,现在就要把链接提取出来

import re
import json

#使用正则表达式匹配目标数据,把左右的特征写下来,匹配中间的目标数据
 jsonData_re = re.compile( '>window.__playinfo__=(.*?)</script><script>window.__INITIAL_STATE__', re.I | re.S)
 jsonData = jsonData_re.findall(html) 
#按照json语法提出第一条链接 
jsonData_init = json.loads(jsonData[0]) 
audioUrl = jsonData_init['data']['dash']['audio'][0]['base_url']

最后加上协议头,再试着访问一下

headers = {
    'Origin': 'https://www.bilibili.com',
    'Referer': url,
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
print(session.get(audioUrl, headers=headers).content)

输出结果如下:

这有可能是我们要的数据流,再试着把他写入文件

# 以二进制写入,输出在运行目录下
# 注意:源码中的audio是mp4文件,所以我们输出时也要是mp4文件
file = open('Audio.mp4', 'wb')
file.write(session.get(audioUrl, headers=headers).content)
file.close()

运行成功,这里不方便展示

最后再加点输入验证,完整代码如下

 

 

import json
from sys import exit
import re
from requests import session
bv = input('输入BV号(例:BV1b5411K7nk):')

if bv[:2] != 'BV' and len(bv) < 3:
    input('BV号输入错误,请重试')
    exit()

url = 'https://www.bilibili.com/video/' + bv

print('正在开始运行')

session = session()

html = session.get(url)

jsonData_re = re.compile(
    '>window.__playinfo__=(.*?)</script><script>window.__INITIAL_STATE__', re.I | re.S)
jsonData = jsonData_re.findall(html.text)
if jsonData == []:
    input('BV号输入错误,请重试')
    exit()

print('正在解析数据')

jsonData_init = json.loads(jsonData[0])

audioUrl = jsonData_init['data']['dash']['audio'][0]['base_url']

headers = {
    'Origin': 'https://www.bilibili.com',
    'Referer': url,
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}

print('正在请求数据(等待超过1分钟,建议退出重试)')

#print(response.text)

print('正在写入数据')

file = open('{0}_Audio.mp4'.format(bv), 'wb')
file.write(session.get(audioUrl, headers=headers).content)
file.close()

input('已完成,输入回车退出程序')

 

微信公众号:囧友JIONG
版权声明:
作者:9tai
链接:https://www.jyou9.com/167
来源:囧友资源网-免费资源分享平台
文章版权归作者所有,未经允许请勿转载。
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录