Python爬虫之bili站的正确打开方式
我用 Python 对 b 站的小视频进行了爬取,因为是小视频,大小平均在 5 兆以内。排队时,没网络也能看小姐姐了,爽啊。文末给出了源码获取方式。
b 站小视频地址:
http://vc.bilibili.com/p/eden/rank#/?tab=全部
我爬取了每日的小视频排行榜,学会了每日的,爬取本周、本月的就非常简单了,改个标签就行,稍后详细分析会讲到。以下是爬取结果。
项目环境
语言:Python3
工具:Pycharm
程序结构
主要由 3 部分组成:
get_json():提取目标网页的 json 数据信息。
downloader():下载小视频并显示下载进度。
主函数:循环下载视频直到下载完毕。
代码分析
打开网站往下滑动,视频是动态加载的,打开调试工具,向下滑动加载视频,查看 Headers 中 url ,url 中前面部分的链接是不变的,提取出来。(左右滑动查看全部代码)
http://api.vc.bilibili.com/board/v1/ranking/top?
观察下方参数的变化,发现只有 next_offset 这个字段在变,每次都比前一个多 10。
这就好办了,我们把参数部分单独拿出来,把可变的 next_offset 写成变量,返回目标网页的 json 数据。
接下来,我把小视频下载下来,为了美观,我做了个下载器,显示下载速度。效果如下。
此处有个地方需注意下,请求目标网页时必须带上此网页的 headers 信息,网站做了反爬操作,否则下载下来的视频是空的,部分代码如下。(ps:大家运行代码时把 headers 换成自己浏览器在本网页的 headers 即可)
主函数中为了提取更多视频,我们把 next_offset 这个变量做个循坏,然后从 json 数据中提取视频的标题和可下载的链接。观察下页面的 json 数据结构就可以轻松获取文章标题和下载链接数据。
为了防止有些视频没有提供下载链接的情况,我加了异常处理,细心的朋友应该发现了文章前面给的效果图只有84个视频,原因就在此。最后,为了防止 ip 被封,设置了随机等待时间。其实,总体下来,不到 5 分钟,100 个视频可以全部下载完毕。
今日排行榜的 100 个小视频搞定了,每周、每月的就简单了,get_json() 方法中参数 params 有个标签字段 tag,每日的是「今日热门」,每周的改成「每周热门」,每月的改成「每月热门」就搞定了。
源码获取:
链接:https://pan.baidu.com/s/1IL5ZVu4vLIvpZ1aXpwZmbg 提取码:7962
Python爬虫之bili站的正确打开方式相关推荐
- python论文参考文献名称_Word的正确打开方式(附毕业论文模板)
----点击蓝字关注我呀---- 三年前的我搞毕业设计,第一次接触这玩意儿,一脸懵逼 好在我朱哥搞过大创(还是国家级的),当时给我各种科普单片机的知识 搞大创的好处就是当我们不知道是画机械图还是 ...
- 这才是B站的正确打开方式!
关注+星标,每天学习C语言新技能 因公众号更改推送规则,请点"在看"并加"星标"第一时间获取精彩技术分享 来源:网络 每天都在用B站刷杂七杂八的视频,有没有考虑 ...
- python实现p图软件_这才是Python程序员P图的正确打开方式!
[IT168 评论]现代社会,不P图的人简直就像是恐龙一样稀奇,大到瘦脸瘦腿瘦全身,小到滤镜大眼高鼻梁,五花八门的手段令人应接不暇.那么程序员作为这个星球的特殊物种,P图才不会用毁图秀秀这种软件,下面 ...
- log python_基于Python log 的正确打开方式
保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import sm ...
- python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!
四舍五入就用round( )?Python四舍五入的正确打开方式! 2018-09-22 21:40 阅读数 4 <>round( )函数简介 菜鸟教程中介绍到,round() 函数作用就 ...
- ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学, 你就是下一个大佬❤️!
❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学,你就是下一个大佬❤️! 前言 程序说明 数据爬取 获取 CSDN 作者总榜数据 获取收藏夹列表 获取收藏数据 爬虫程序完整代码 ...
- lambda学习视频和stream学习视频(Java8 Lambda表达式视频教程)-Java爬虫-网络购物的正确打开方式
百度网盘 链接:https://pan.baidu.com/s/1upU5EVXOQeho6poDYdnhiQ 提取码:088l Java8 Lambda表达式视频教程 https://www.bil ...
- 【Python】NumPy 中 ravel() 正确打开方式
[Python]NumPy 中 ravel() 正确打开方式 最近在看书时,对numpy的ravel()的有些疑惑,书上这样写到"如果结果中的值在原始数组中是连续的,则ravel 不会生成底 ...
- Python Matplotlib绘图的正确打开方式
Python Matplotlib绘图的正确打开方式 文章目录 Python Matplotlib绘图的正确打开方式 1.先搞懂fig.axes.axis `Figure` `Axes` `Axis` ...
最新文章
- Spring并发访问的线程安全性问题
- 利用OpenCV实现图像修复(含源码链接)
- js手机端时间区间_js 时间区间
- 分子克隆科研利器SnapGene,测序验证好帮手
- 如何删除SQL Server下注册的服务器
- twisted系列教程九–Deferred 的第二个小插曲
- win10wifi间歇性断网重启后恢复_实用!Xbox Series X 在重启后也能快速恢复之前的游戏状态...
- Rust: trait 孤儿规则
- 手机上怎么安装Java的软件游戏
- 跨境电商ERP系统功能有那些?
- Verilog 语法小结
- mysql省市区数据导入_最新行政区划省市区镇街道 导入数据库 MYSQL (2020年8月 )
- 知识分享 | 卡方分析的入门小知识
- vue 前端仿QQ截图实现Web端自定义截屏(JS版)
- C++ 面向对象高级开发(侯捷)
- Linux使用详解(进阶篇)
- SVN修改提交后的文件名
- 如何禁用笔记本触摸板
- Delta tuning(只抓核心)
- 2021-09-15单片机方案——LED补光灯方案
热门文章
- Windows10下安装vs2013旗舰版(Visual Studio 2013 Ultimate)
- 传播模型——简单的元胞自动机(3)
- transition transform translate 之间的区别
- 一些http和tomcat知识补充
- 【JDK编译】Centos7编译OpenJDK7
- android imageview 拉伸图片大小,【教程】安卓保证图片长宽比的同时拉伸图片
- 思科SCCP CIPC软电话安装成SIP软电话
- 转:MIME(Multipurpose Internet Mail Extensions)类型
- 从零开始:微信小程序新手入门宝典
- 【数学建模】“一口价”的战略(博弈模型)