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之编写类之四再论继承
Oct 11 Python
Python二分查找详解
Sep 13 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python实现自动添加脚本头信息的示例代码
Sep 02 Python
python 系统调用的实例详解
Jul 11 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python json读写方式和字典相互转化
Apr 18 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
Python 存取npy格式数据实例
Jul 01 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 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
php+mysql分页代码详解
2008/03/27 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
js实现div弹出层的方法
2014/11/20 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
vue slots 组件的组合/分发实例
2018/09/06 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
Python判断操作系统类型代码分享
2014/11/22 Python
详解Django中的权限和组以及消息
2015/07/23 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
Python创建xml文件示例
2017/03/22 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
工厂标语大全
2014/10/06 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
python中取整数的几种方法
2021/11/07 Python