python哔哩哔哩爬虫经验

目标

下载某up主所有视频

分析一、获取视频播放地址bv号

1、UP主页视频地址 API 接口 有多个数据加密,无法模拟接口地址
解决方法 使用 selenium 收集bv号

2、点击播放全部, 在此页面 可以获取所有bv号
最近20个在静态原 文件里,后边的接口在静态文件里最后一个视频 开始拼接
最后20个 不需要通过上一个id 就能获取,但需要计算总视频个数
举例 一共106个视频,前20静态页面 后边 接口依次是 20 20 20 20 6 20,6这个参数 需要通过计算 得到 并拼接到接口中
经测试 可以 按 上一个id 是下一个接口的参数 来请求 最后一个 请求参数依然是20 返回值是6
静态 20 + api 20 +20 +20 +20 +6方式去获取

代码书写

1、静态页面请求(前20)
获取 20个bv 和page 和最后一个的id
2、api接口请求(剩余的86)
当访问不到新的API接口就停止,有两种解决方法
1、使用try…except 异常 捕获 ,当获取不当api时会报错,用异常捕获跳过报错来停止 执行该函数
2、我们发现当获取bv_list数量 低于20 或不等于20时, 是最后一次请求,可以写判断语句 判断list数量等于20,在执行,不
是20都不执行if里的内容
3、异常捕获 和if判断,通过 time执行时间的长短,if判断用时最少
使用异常捕获会对服务器多发送两次请求,耗时长,服务器压力大能少访问服务器就少访问一次

问题思考

1、一个UP主 所有视频中含有p2内容 实际视频数量要多,获取所有bv号 和page 才能计算出总视频数量106/120个

2、下载过程 遇到意外终止 继续是否可以快速断点下载,不需要重头再来
每一个(120) 都有独立的bv + page 组成的唯一对比参数,在对比后找到没有的 继续下载

3、下载后,up主会更新新的视频 如何在更新中,智能点 让代码自己认识到哪些是需要更新的,哪些不需要再次判断一遍

分析二、通过bv号 获取视频

1、一个bv号会有p2 视频
2、视频的分辨率 必须要带上cookie 才是高清
3、以上的bv号 与本地 不能进行对比, 如果 中断后 没有p2 很难发现 p2没有下载
4、视频名称 有主标题 副标题

总结

up主视频爬取总结

1、一个视频含有p2
2、下载视频对比 要比对bv号和page 都对比 才是完整的
3、下载按照up主上传视频时间顺序下载, 最开始的作品先传,bv号和page作为一个数组内容 在反顺序
4、和文件夹视频名称做对比 不能使用集合 会打乱下载顺序
5、下载的时候 加cookie 下载清晰度最高的视频
6、名称 有主标题 副标题 ,一致 只留一个 不一致 两个一起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值