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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
Python 字符串定义
Sep 25 Python
Python简单删除目录下文件以及文件夹的方法
May 27 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
实践Vim配置python开发环境
Jul 02 Python
python实现批量修改服务器密码的方法
Aug 13 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Python3如何在Windows和Linux上打包
Feb 25 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随机生成数字字母组合的方法
2015/03/18 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
jQuery 一个图片切换的插件
2011/10/09 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
pywinauto自动化操作记事本
2019/08/26 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
电子商务助理求职自荐信
2014/04/10 职场文书
党代会心得体会
2014/09/04 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
施工安全员岗位职责
2015/04/11 职场文书
入党转正申请报告
2015/05/15 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android