『源码教程』【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
来源:囧友资源网-免费资源分享平台
文章版权归作者所有,未经允许请勿转载。
版权声明:
作者:9tai
链接:https://www.jyou9.com/167
来源:囧友资源网-免费资源分享平台
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
文章目录
关闭
共有 0 条评论