使用 Python 下载 B 站视频

用python爬取下载b站视频 B站之所以火,是因为趣味与知识并存。正如一句“你在B站看番,我在B站学习”,B站还是有一些质量比较好的学习视频。当你在B站上看到喜欢的视频想保存下来时,怎么办呢? 转入正题,本篇推文主要介绍如何将B站上把喜欢的视频下载下来,帮助更多需要学习的小伙伴,详细步骤如下: 网页分析 视频下载方法 成果展示 微信视频号的加入,再度引燃了短视频领域,今天我们爬取B站的每天播放量最多的小视频,其他类型的视频可以参考这个方法。 视频下载方法 上一部分已对网页进行了分析,现... 阅读详情

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理

作者:某某白米饭     来源:Python技术 [公众号ID:pythonall]

链接:https://juejin.cn/post/6913143976895709191

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

 

使用 Python 下载 B 站视频

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 站的番剧,似乎和普通的视频不一样

 

 

【爬虫】批量下载B站收藏夹视频 - Python 批量下载B站收藏夹视频 阅读详情

相关推荐

B站充电视频下载器(需配合会员Cookie使用,仅供学习交流,Python)

这个程序是一个用于下载B站充电视频的工具,依赖于用户提供的会员Cookies。

qq_40753021的博客 2万+

Python学习笔记——pycharm下载模块schedule

在settings里进行如下操作 点击加号后安装即可 安装其他模块一样

奔跑的狮子 3312

如何使用 Python 和 FFmpeg 下载 B站视频

通过这篇文章,你学会了如何使用 Python 和 FFmpeg 下载 B站的视频。利用 B站的 API 获取视频和音频流信息,结合 FFmpeg 下载并合并视频流,最终将其保存为一个.mp4格式的完整视频。希望这篇教程对你有所帮助!如果你有任何问题,欢迎在评论区提问。

qq_43580271的博客 1308

视频下载网站链接:B站视频下载链接

视频下载网站链接:B站视频下载链接

weixin_43977590的博客 1万+

PyPI 官网下载 | schedule-0.6.0.tar.gz

资源来自pypi官网。 资源全名:schedule-0.6.0.tar.gz

深入解析CAN总线BusOff故障的检测与恢复机制

本文深入解析了CAN总线BusOff故障的检测与恢复机制。BusOff是CAN节点因发送错误过多而被强制离线的一种严重状态。文章详细阐述了其触发原理,即发送错误计数器(TEC)超过255,并重点介绍了通过软件实现的快慢恢复机制,以增强网络在异常情况下的稳定性和韧性。

weixin_29158047的博客 523

python 下载apscheduler

方法二: python3 -m pip install apscheduler --user。方法一:pip3 install apscheduler。

qq_63032999的博客 444

究竟什么是虚拟同步机???虚拟同步机巨简单理解

同步发电机定子铁芯的内圆均匀分布着定子槽,槽内按一定规律嵌放着对称的三相绕组U1-U2、V1-V2、W1-W2,如图1所示。工作原理转子铁芯上装有制成一定形状的成对磁极,磁极上绕有励磁绕组。励磁绕组上通直流电时,会在电机的气隙中形成极性相间的分布磁场,称为励磁磁场。当原动机拖动转子以恒定速度旋转时,励磁磁场随转轴一起旋转并顺次切割定子各相绕组。定子电枢绕组中将会感应出大小和方向周期性变化的三相对称正弦感应电动势。各相电动势大小相等,相位各差120°。

weixin_53126442的博客 2602

如何快速下载AcFun视频?2025年最实用的A站视频下载神器推荐

你是否曾遇到喜欢的AcFun视频想要离线保存却找不到合适工具的困扰?今天为大家推荐一款完全免费的A站视频下载神器——AcFunDown,它不仅支持PC端UI界面操作,还能轻松实现收藏夹、UP主视频批量下载,让你随时随地畅享精彩内容! ## AcFunDown核心功能亮点 作为一款专为A站用户打造的视频下载工具,AcFunDown凭借直观的操作界面和强大的功能特性,成为众多爱好者的首选。以下是它

gitblog_01064的博客 1366

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 259

Windows 11任务管理器隐藏技能:一眼揪出内存泄漏的“元凶”(分页/非分页缓冲池详解)

本文详细介绍了Windows 11任务管理器中隐藏的分页缓冲池和非分页缓冲池功能,帮助用户精准定位内存泄漏问题。通过启用隐藏列、解读数据异常信号,并结合实战案例和高级工具推荐,为开发者和IT运维人员提供了高效的内存问题诊断与解决方案。

weixin_29284885的博客 620

python下载b站视频_python怎么下载b站视频

广告关闭100GB直播流量包仅需9.9元,10TB点播流量包仅需999元,参与活动还赠移动直播SDK,短视频SDK,小程序插件等,大促100%中奖率b 站视频资源越来越丰富了,你能想到的和想不到的资源都能在 b 站上找到。 但是 b 站好像没有直接提供视频下载的功能,下面给大家介绍一个非常简单强大的视频下载工具,只要电脑安装 python 即可,而且不用动手写代码! you-get,一个强大视频下...

weixin_39999781的博客 2361

Veeam Backup & ONE download

前言 Veeam® Availability Suite™ 是 Veeam 的旗舰解决方案,可实现简单、灵活和可靠的数据管理。消除与数据保护、恢复、监控、勒索软件防护和合规性相关的手动流程,从而减轻数据维护压力。Veeam 能够帮助您节省时间和成本,同时支持您减少在备份方面花费的时间,将更多精力放在推动业务发展上。 Veeam Availability Suite Release 版本 包含 发布时间 复制磁力链接使用迅雷或者bittorrent ...

极致,细节 1995

python下载b站视频_【python】抖音无水印视频下载和b站视频下载

本帖最后由 370125229 于 2020-3-27 17:38 编辑萌新一枚,拿这个练练手用python写的,部分视频可能还是会有水印抖音 蓝奏: https://www.lanzous.com/ia85fleb站视频 支持视频合集下载,可以选择清晰度,不支持 大会员视频下载,仅适用于64位系统b站:https://www.lanzous.com/iapb30jb站的python代码也一起...

weixin_39531229的博客 1211

改进yolov8|BackBone改进:PWConv、FasterNeXt替换yolov8主干网络

各位哥哥姐姐弟弟妹妹大家好,我是干饭王刘姐,主业干饭,主业2.0计算机研究生在读。和我一起来改进yolov8变身计算机大牛吧!本文中的论文笔记都是刘姐亲自整理,原创整理哦~

weixin_44379985的博客 748

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 249

python爬虫实战之b站视频下载-下

前面所有的准备工作基本做完了,这篇帖子的主要目的是代码的编写,已经编写的流程分析等 下面是前面整理的数据: 进入用户空间获得视频的aid https://api.bilibili.com/x/space/arc/search?mid=149040332&pn=1&ps=25&jsonp=jsonp 通过aid请求pagelist 获得视频列表信息https://api.bilibili.com/x/player/pagelist?aid=883949473&a.

Harlan的博客 1524

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6114

《python爬虫练习》之b站视频下载

前言 因为网页B站没有下载视频和缓存视频(手机App有缓存)的功能,所以如果是想下载教学视频我们就需要用到一些第三方工具,讲真的,这真的很不方便,希望阿b能够重视。我们看其他视频可能是一次过,但教学视频可是要重复复习的,没WiFi真的很费流量。 爬取任务:下载B站视频 (单个) 分析B站 进入B站 ,使用f12进入开发者模式进行分析(小试牛刀,这里随便选择比较短的小视频(BV1H54y1y7Uu) ) 这里有很多MP4文件,我们可以将请求链接复制到新窗口中打开,看看是不是我们所要的..

九圣残炎的编程博客 1128

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

教你如何用python批量下载B站的视频

一开始,我本来是想要做一个将视频转换为字符串的视频的,首先就得找一个视频做素材,紧接我就逛逛B站,找我想要的视频,然后发现B站并没有下载的按钮,于是乎我就想,就做个小爬虫爬一个视频来用,然后我发现事情并没有我想象的那么简单。。。 想要爬取视频,首先就得去获取视频的url。首先先从这个大的搜索窗口里,获取视频的信息,url,标题,id编号等待,这里就直接在chromo浏览器里按F12,跳出下...

weixin_39450931的博客 2839

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Python实时下载B站直播间视频(M3U8视频流)

大家好,我是小小明。 今天我将带大家一步步来研究如何下载B站直播视频。 获取直播间下载地址 首先获取指定分区直播间id列表: import requests from lxml import etree def get_room_ids(room_type="学习"): urls = {"学习": "https://live.bilibili.com/p/eden/area-tags?visit_id=9ynmsmaiie80&areaId=377&parentAreaId=11

小小明-代码实体的专栏 4万+

python下载b站视频_使用 Python 一键下载B站视频

点击“Python编程与实战”,选择“置顶公众号”第一时间获取 Python 技术干货! B 站视频资源越来越丰富了,你能想到的和想不到的资源都能在 B 站上找到。但是 B 站好像没有直接提供视频下载的功能,下面给大家介绍一个非常简单强大的视频下载工具,只要电脑安装 Python 即可,而且不用动手写代码!you-get,一个强大视频下载工具 , 是 github 上 Python 的一个开源库(...

weixin_39633054的博客 289

python爬虫爬取b站视频_Python爬虫教程:爬取下载b站视频【附源码】

爬取下载b站视频【附源码】,话不多说,说干就干。下载仓库git@github.com:inspurer/PythonSpider.git或者直接下载:https://github.com/inspurer/PythonSpider/tree/master/bilibili替换随便打开一个b站的界面,比如将url复制到代码中去,运行代码,稍等一会儿,上述图中的视频就被下载下来了。完整代码奉上!imp...

weixin_39889214的博客 1209

B站视频Python爬虫下载工具

B站视频Python爬虫下载工具 【下载地址】B站视频Python爬虫下载工具 这是一款基于Python开发的B站视频下载工具,能够轻松抓取并保存B站上的视频资源。用户只需简单修改代码中的视频ID参数,即可快速下载指定视频。工具操作便捷,适合需要离线观看或保存B站内容的用户。使用前需确保已安装Python环境,并遵守B站...

gitblog_06788的博客 603
上一篇: python 基础系列--条件控制与循环语句
下一篇: 用 Python 爬取 QQ 空间说说和相册
pythonputao
博客等级 码龄6年 60粉丝 111原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值