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字符串替换示例
Apr 24 Python
python实现的udp协议Server和Client代码实例
Jun 04 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
Python有序字典简单实现方法示例
Sep 28 Python
python编程羊车门问题代码示例
Oct 25 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
django允许外部访问的实例讲解
May 14 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
对python周期性定时器的示例详解
Feb 19 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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
基于文本的访客签到簿
2006/10/09 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
PHP多维数组排序array详解
2017/11/21 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
python数字类型math库原理解析
2020/03/02 Python
python如何实时获取tcpdump输出
2020/09/16 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
机关职员工作检讨书
2014/10/23 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
运动会运动员赞词
2015/07/22 职场文书
护士心得体会范文
2016/01/25 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js