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使用正则表达式匹配字符串开头并打印示例
Jan 11 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
python os用法总结
Jun 08 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
浅谈pycharm使用及设置方法
Sep 09 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
parser.add_argument中的action使用
Apr 20 Python
python实现ROA算子边缘检测算法
Apr 05 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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 获取百度的热词数据的代码
2012/02/18 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
关于ES6尾调用优化的使用
2020/09/11 Javascript
用python删除java文件头上版权信息的方法
2014/07/31 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python中reader的next用法
2018/07/24 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Keras 使用 Lambda层详解
2020/06/10 Python
python实现马丁策略的实例详解
2021/01/15 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
PHP面试题附答案
2015/11/28 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
会计找工作求职信范文
2013/12/09 职场文书
工程承包协议书
2014/04/22 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
义诊活动总结
2015/02/04 职场文书
2016年校长新年寄语
2015/08/17 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python