0°

Python爬虫之b站小视频

内容预览:
  • b 站小视频地址: http://vc.bilibili.com/p/eden/rank#/?tab=全部 我爬...~
  • downloader():下载小视频并显示下载进度~
  • 接下来,我把小视频下载下来,为了美观,我做了个下载器,显示下载速度~

原文始发于微信公众号(Python绿色通道):Python爬虫之b站小视频

点击上方”Python绿色通道”,选择”置顶公众号”

第一时间关注 Python 技术干货!

阅读文本大概需要 3.6 分钟。

国庆假期,大家应该都出去浪了吧,不用想,各个景区应该都是人满为患了,大部分时间都花在排队上了。pk哥知道人多,哪儿也没去,就在附近转悠了下,在家闲着了。这不,为了给排队等待的朋友解闷,我这次对 b 站下手了。我用 Python 对 b 站的小视频进行了爬取,因为是小视频,大小平均在 5 兆以内。排队时,没网络也能看小姐姐了,爽啊。文末给出了源码获取方式。

b 站小视频地址:

http://vc.bilibili.com/p/eden/rank#/?tab=全部


Python爬虫之b站小视频

我爬取了每日的小视频排行榜,学会了每日的,爬取本周、本月的就非常简单了,改个标签就行,稍后详细分析会讲到。以下是爬取结果。

Python爬虫之b站小视频

项目环境

语言:Python3
工具:Pycharm

程序结构

Python爬虫之b站小视频

主要由 3 部分组成:

  • get_json():提取目标网页的 json 数据信息。

  • downloader():下载小视频并显示下载进度。

  • 主函数:循环下载视频直到下载完毕。

代码分析

打开网站往下滑动,视频是动态加载的,打开调试工具,向下滑动加载视频,查看 Headers 中 url ,url 中前面部分的链接是不变的,提取出来。(左右滑动查看全部代码)

http://api.vc.bilibili.com/board/v1/ranking/top?



Python爬虫之b站小视频

观察下方参数的变化,发现只有 next_offset 这个字段在变,每次都比前一个多 10。

Python爬虫之b站小视频

这就好办了,我们把参数部分单独拿出来,把可变的 next_offset 写成变量,返回目标网页的 json 数据。

Python爬虫之b站小视频

接下来,我把小视频下载下来,为了美观,我做了个下载器,显示下载速度。效果如下。

Python爬虫之b站小视频

此处有个地方需注意下,请求目标网页时必须带上此网页的 headers 信息,网站做了反爬操作,否则下载下来的视频是空的,部分代码如下。(ps:大家运行代码时把 headers 换成自己浏览器在本网页的 headers 即可)

Python爬虫之b站小视频

主函数中为了提取更多视频,我们把 next_offset 这个变量做个循坏,然后从 json 数据中提取视频的标题和可下载的链接。观察下页面的 json 数据结构就可以轻松获取文章标题和下载链接数据。

Python爬虫之b站小视频

为了防止有些视频没有提供下载链接的情况,我加了异常处理,细心的朋友应该发现了文章前面给的效果图只有84个视频,原因就在此。最后,为了防止 ip 被封,设置了随机等待时间。其实,总体下来,不到 5 分钟,100 个视频可以全部下载完毕。

Python爬虫之b站小视频

今日排行榜的 100 个小视频搞定了,每周、每月的就简单了,get_json() 方法中参数 params 有个标签字段 tag,每日的是「今日热门」,每周的改成「每周热门」,每月的改成「每月热门」就搞定了。


推荐阅读:
没有能力,你认识再多大佬也没有用
一分耕耘,一分收获的观念坑我们很久了


的Python之旅

Python爬虫之b站小视频

长按,识别二维码,关注公众号


Python爬虫之b站小视频

以上就是:Python爬虫之b站小视频 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论