Python如何实现爬取B站视频


Posted in Python onMay 20, 2020

5月3日晚,央视在《新闻联播》前播放了B站青年宣言片《后浪》,这是B站首次登陆央视黄金时段,今天在朋友圈陆续看到相关的视频。最早用B站的同学都知道,B站是和A站以异曲同工的鬼畜视频及动漫,进入到大众视野的非主流视频网站。哔哩哔哩现为国内领先的年轻人娱乐、文化社区,该网站于2009年6月26日创建,被粉丝们亲切的称为“B站”。

B站之所以火,是因为趣味与知识并存。它是一个重度宅腐二次元集结地。B站包含动漫、漫画、游戏,也有很多由繁到简、五花八门的视频,很多冷门的软件和绘画技巧在B站都可以找到完整的教学视频。正如一句“你在B站看番,我在B站学习”,B站还是有一些质量比较好的学习视频。当你在B站上看到喜欢的视频想保存下来时,怎么办呢?

转入正题,本篇推文主要介绍如何将B站上把喜欢的视频下载下来,帮助更多需要学习的小伙伴,详细步骤如下:

  • 网页分析
  • 视频下载方法
  • 成果展示

微信视频号的加入,再度引燃了短视频领域,今天我们爬取B站的每天播放量最多的小视频,其他类型的视频可以参考这个方法。

Python如何实现爬取B站视频

网页分析

网址为:

'http://vc.bilibili.com/p/eden/rank#/?tab=全部'

我们可以看到Request URL这个属性值,我们向下滑动加载视频的过程中,发现只有这段url是不变的。next_offset 会一直变化,我们可以猜测,这个可能就是获取下一个视频序号,我们只需要把这部分参数取出来,把 next_offset 写成变量值,用 JSON 的格式返回到目标网页即可。

Python如何实现爬取B站视频

Python如何实现爬取B站视频

视频下载方法

上一部分已对网页进行了分析,现在我们可以利用requests.get方法来获取B站上的小视频。

核心代码

def get_json(url):
  headers = {
    'User-Agent':
      'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
  }

  params = {
    'page_size': 10,
    'next_offset': str(num),
    'tag': '今日热门',
    'platform': 'pc'
  }

  try:
    html = requests.get(url, params=params, headers=headers)
    return html.json()

  except BaseException:
    print('request error')
    pass

def download(url,path):
  start = time.time() # 开始时间
  size = 0
  headers = {
    'User-Agent': 
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
  }

  response = requests.get(url,headers=headers,stream=True) 
  chunk_size = 1024 
  content_size = int(response.headers['content-length']) 
  if response.status_code == 200:
    with open(path,'wb') as file:
      for data in response.iter_content(chunk_size=chunk_size):
        file.write(data)
        size += len(data)

成果展示

上一部分我们已经展示了如何用Python下载视频的方法,下面我们进行效果展示

Python如何实现爬取B站视频

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
python日志记录模块实例及改进
Feb 12 Python
Python做简单的字符串匹配详解
Mar 21 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
python连接数据库的方法
Oct 19 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
python判断链表是否有环的实例代码
Jan 31 Python
Python偏函数实现原理及应用
Nov 20 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
pytorch 使用半精度模型部署的操作
May 24 Python
对Keras自带Loss Function的深入研究
May 25 Python
django在开发中取消外键约束的实现
May 20 #Python
520使用Python实现“我爱你”表白
May 20 #Python
django 外键创建注意事项说明
May 20 #Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 #Python
Python使用Paramiko控制liunx第三方库
May 20 #Python
解决django框架model中外键不落实到数据库问题
May 20 #Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 #Python
You might like
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
php将图片文件转换成二进制输出的方法
2015/06/10 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
vue实现选中效果
2020/10/07 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python中的itertools的使用详解
2020/01/13 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
应聘医学检验人员自荐信
2013/09/27 职场文书
高中学生评语大全
2014/04/25 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
离婚协议书怎么写
2014/09/12 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
高三毕业感言
2015/07/30 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers