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打开网页和暂停实例
Sep 30 Python
用Python进行TCP网络编程的教程
Apr 29 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
Python实现屏幕截图的两种方式
Feb 05 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
Python unittest模块用法实例分析
May 25 Python
对python制作自己的数据集实例讲解
Dec 12 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python中的面向接口编程示例详解
Jan 17 Python
在 Python 中利用 Pool 进行多线程
Apr 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
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
JavaScript 数组详解
2013/10/10 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
layui分页效果实现代码
2017/05/19 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
Python help()函数用法详解
2014/03/11 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
python实现按长宽比缩放图片
2018/06/07 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Ajax主要包含了哪些技术
2014/06/12 面试题
国培教师自我鉴定
2014/02/12 职场文书
库房管理员岗位职责
2014/03/09 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
python 解决微分方程的操作(数值解法)
2021/05/26 Python
Python re.sub 反向引用的实现
2021/07/07 Python