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多进程操作实例
Nov 21 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
python中int与str互转方法
Jul 02 Python
python散点图实例之随机漫步
Aug 27 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python实现文件的分割与合并
Aug 29 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
python使用glob检索文件的操作
May 20 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Ruby如何定义一个类
2012/10/08 面试题
大学英语演讲稿范文
2014/04/24 职场文书
2014年中秋寄语
2014/08/11 职场文书
平安工地汇报材料
2014/08/19 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
MYSQL 表的全面总结
2021/11/11 MySQL
python对文档中元素删除,替换操作
2022/04/02 Python
Python字符串的转义字符
2022/04/07 Python