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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
Python+PIL实现支付宝AR红包
Feb 09 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
详解python数据结构和算法
Apr 18 Python
python提取log文件内容并画出图表
Jul 08 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
python实现代码审查自动回复消息
Feb 01 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
python基础之类方法和静态方法
Oct 24 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 函数语法介绍一
2009/06/14 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
js+css实现打字效果
2020/06/24 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python binascii 进制转换实例
2019/06/12 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
情侣吵架检讨书
2014/02/05 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
草房子读书笔记
2015/06/29 职场文书