使用 Python 下载 B 站视频

来源:Python 技术「ID: pythonall」

B 站,一个月活用户达到 1.72 的视频网站,有时候会因为某些未知的原因导致放入收藏夹的视频失效,为了防止视频被和谐、被失效,身为 Pythonista 来撸一个 B 站的视频下载器。

分析页面

首先我们在 B 站点开一个视频(https://www.bilibili.com/video/BV1Vh411Z7j5)用 F12 分析一波,在下图中可以看到有多个 m4s 结尾的链接,并且响应的类型是 video/mp4。

把面板打到 Elements 界面,找到一个 window.playinfo 的 javascript 变量,并且内容和上图中的 url 类似,都是 m4s 链接,目标已找到。

获取标题和链接

抓取视频页面,并用 BeautifulSoup 模块解析页面,获取视频标题和链接(https://www.bilibili.com/video/BV17K4y1x7gs)。

def __init__(self, bv): # 视频页地址 self.url = 'https://www.bilibili.com/video/' + bv # 下载开始时间 self.start_time = time.time()
def get_vedio_info(self): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36' }
response = requests.get(url = self.url, headers = headers) if response.status_code == 200:
bs = BeautifulSoup(response.text, 'html.parser') # 取视频标题 video_title = bs.find('span', class_='tit').get_text()
# 取视频链接 pattern = re.compile(r"window\.__playinfo__=(.*?)$", re.MULTILINE | re.DOTALL) script = bs.find("script", text=pattern) result = pattern.search(script.next).group(1)
temp = json.loads(result) # 取第一个视频链接 for item in temp['data']['dash']['video']: if 'baseUrl' in item.keys(): video_url = item['baseUrl'] break
return { 'title': video_title, 'url': video_url } except requests.RequestException: print('视频链接错误,请重新更换')

示例结果:

{ 'title': '《属于周杰伦的情歌王2.0》安安静静的回忆有杰伦陪伴的20年', 'url': 'http://cn-jszj-dx-v-06.bilivideo.com/upgcxcode/34/57/214635734/214635734_nb2-1-30080.m4s?expires=1595538100&platform=pc&ssig=Q5uom_rGdPasJhHBvna8tw&oi=3027480765&trid=347f5dc41e9647e2a6dce48286d0b478u&nfc=1&nfb=maPYqpoel5MI3qOUX6YpRA==&cdnid=2725&mid=0&cip=222.186.35.71&orderid=0,3&logo=80000000'}

下载视频

下载视频使用 urllib 模块的 urlretrieve(url, filename=None, reporthook=None) 方法,它可以将远程数据直接下载到本地。

def download_video(self, video): title = re.sub(r'[\/:*?"<>|]', '-', video['title']) url = video['url'] filename = title + '.mp4' opener = urllib.request.build_opener() opener.addheaders = [('Origin', 'https://www.bilibili.com'), ('Referer', self.url), ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36')] urllib.request.install_opener(opener) urllib.request.urlretrieve(url = url, filename = filename)

示例结果:

一个视频下载完成。

进度条

现在还缺一个进度条,没有进度条的下载工具是一个没有灵魂的下载工具。

def schedule(self, blocknum, blocksize, totalsize): ''' urllib.urlretrieve 的回调函数 :param blocknum: 已经下载的数据块 :param blocksize: 数据块的大小 :param totalsize: 远程文件的大小 :return: ''' percent = 100.0 * blocknum * blocksize / totalsize if percent > 100: percent = 100 s = ('#' * round(percent)).ljust(100, '-') sys.stdout.write("%.2f%%" % percent + '[ ' + s +']' + '\r') sys.stdout.flush()

示例结果:

最后更新一下下载视频的代码,加入 reporthook 参数。

urllib.request.urlretrieve(url = url, filename = filename, reporthook = self.schedule)

总结

简单的一个 B 站视频下载工具到这就完成了,有兴趣的话大伙可以试试下载 B 站的番剧,似乎和普通的视频不一样。

(0)

相关推荐

  • 爬虫爬取代理ip

    import urllib.request from bs4 import BeautifulSoup import re import time import random # ---------- ...

  • 教你用 Python 下载手机小视频

    上次给大家介绍了 mitmproxy 这个抓包工具,并且演示了如何用这个工具改变你电脑上网的请求以及请求返回信息,是不是觉得还有点意思.今天再为大家介绍下使用这个工具如何监控手机上网,并且通过抓包,把 ...

  • Mac下载B站视频

    网上下载Downie for Mac软件,把视频链接拖拽到Downie的主界面即可下载. 下载链接:http://www.pc6.com/mac/112659.html

  • C站是什么?怎么下载C站视频

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/C站是什么? 作者:融水公子 rsgz B站教程 B站教程 http://www.rsgz.top/post/433.html 呃,相信大家对于b ...

  • 最高4K,还终身免费,用它下载B站视频太香了!

    队长来了. 前天有个小伙伴私信说有没有可以把 B 站视频下载到电脑本地的方法,队长看了一下往期文章,确实还没有给大家介绍过下载 B 站视频的软件. 择日不撞日,今天就把唧唧 Down 这款软件安利给大 ...

  • 怎么下载B站视频到电脑上(最新B站视频下载教程)

    看到喜欢的B站视频怎么下载? 这里有一个简单的哔哩哔哩/B站视频下载教程,一学就会! 如何下载B站视频到电脑上 第一步:首先,将4K Video Downloader软件下载并安装到你的电脑上,然后运 ...

  • python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  • 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)

    文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_video_spider 2.视频json的查找 四.源代码 1.Bili ...

  • 教你如何使用Python下载抖音各大V视频

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于Python七号 ,作者 somenzz Python爬虫.数据分析.网站开发 ...

  • 批量下载爱奇艺、优酷、B站视频

    本文转自公众号无税便利店 作者:哆啦魔仙 大家都知道现在许多平台的视频 都有自己独特的编码方式 如果你想要下载使用,真的非常麻烦 就拿B站来说 上面有非常多的学习资源 你可以免费的观看学习 但如果想保 ...