用python爬取B站视频
最近刚学了爬虫,拿B站练了下手。
学习了@鑫xing这篇,他已经讲的很详细了,感谢作者。
我只是对其中一些地方做了简化,还有一些失效的部分做了修改,欢迎探讨。
下面是完整的代码
import requests from lxml import html import re import json import os def get_title_json(url): head = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67' } r = requests.get(url, headers=head) #通过xpath获取视频的标题 tree = html.fromstring(r.text) title = str(tree.xpath('//*[@id="viewbox_report"]/h1/@title')[0]) #除去标题中的奇怪字符,这些字符会影响文件名的保存,产生未知错误 s = ['\n', ',', '。', ' ', '—', '”', '?', '“', '(', ')', '、','|'] for i in s: title = title.replace(i, '') print(f'视频标题:"{title}"') #通过re获取包含视频和音频地址的json字段 json_data = re.findall('<script>window.__playinfo__=(.*?)</script>', r.text)[0] json_data = json.loads(json_data) audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0] print('已提取到音频地址') video_url = json_data['data']['dash']['video'][0]['backupUrl'][0] print('已提取到视频地址') return title,audio_url,video_url def download(title,audio_url,video_url): #这里的head加上Referer,避免让网站发现自己是爬虫 head = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67', 'Referer':url } print('开始下载音频') r_audio = requests.get(url=audio_url, headers=head) audio_data = r_audio.content with open(title+'.mp3', mode='wb') as f: f.write(audio_data) print('音频下载完成') print('开始下载视频') print('下载中,请稍等...') r_video = requests.get(url=video_url, headers=head) video_data = r_video.content with open(title+'.mp4', mode='wb') as f: f.write(video_data) print('视频下载完成') def audio_video_add(title): print('开始合成') cmd=f' ffmpeg -i {title}.mp4 -i {title}.mp3 -acodec copy -vcodec copy bili_{title}.mp4' #调用cmd执行ffmpeg程序来合并音频和视频 os.system(cmd) #删除原来的音频和视频 os.remove(title+'.mp4') os.remove(title+'.mp3') print('合成结束') if __name__ == "__main__": while True: value=input('输入该视频的有效链接地址:(输入quit退出)') if value=='quit': break else: url=value title,audio_url,video_url=get_title_json(url) download(title,audio_url,video_url) audio_video_add(title)
这里借助了一个视频处理工具ffmpeg,需要先下载安装,这里是ffmpeg的安装教程,然后记得加入环境变量。如果运行时提示“ffmpeg不是系统内部或外部的命令”,重启一下电脑即可。我在这里困了四五个小时,原来重启一下就好了,哎。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)