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实现过滤单个Android程序日志脚本分享
Jan 16 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
Python实现KNN邻近算法
Jan 28 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
python程序文件扩展名知识点详解
Feb 27 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
python中有帮助函数吗
Jun 19 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数组应用之比较两个时间的相减排序
2008/08/18 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
PHP $_FILES函数详解
2011/03/09 PHP
php返回json数据函数实例
2014/10/09 PHP
php自定文件保存session的方法
2014/12/10 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
js 操作符汇总
2014/11/08 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
python实现百度关键词排名查询
2014/03/30 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
高中毕业生自我鉴定
2013/11/03 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
师德演讲稿范文
2014/05/06 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
python实现层次聚类的方法
2021/11/01 Python
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS