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客户端socket通信实例
Nov 12 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
TensorFlow损失函数专题详解
Apr 26 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python通过http下载文件的方法详解
Jul 26 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
Django的CVB实例详解
Feb 10 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
python基础学习之递归函数知识总结
May 26 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 ajax 分页类代码
2008/11/13 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
TensorFlow实现卷积神经网络
2018/05/24 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python调用其他文件函数或类的示例
2019/07/16 Python
简单了解python协程的相关知识
2019/08/31 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
美国旅游网站:Tours4Fun
2017/02/17 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
2014新课程改革心得体会
2014/03/10 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android