为了荣誉而战
事情的起因是这样的,由于我想找几部经典电影欣赏欣赏,于是便向某老司机寻求资源(我备注了需要正规视频,绝对不是他想的那种资源),然后他丢给了我一个视频资源网站,说是比较有名的视频资源网站。我信以为真,便激动地点开寻求经典电影,于是便引出了一段经典的百度网盘之战。
免责申明:文章中的工具等仅供个人测试研究,请在下载后24小时内删除,不得用于商业或非法用途,否则后果自负,文章出现的截图只做样例演示,请勿非法使用
先来看下这个视频网站的截图:

不得不说,这是一个正规的网站,正规的视频,只是看着标题的我想多了而已。
怀着满满的求知欲,我点开了链接,并在网页下方看到了视频资源链接。

这里有2种资源,一种是百度网盘,另一种是迅雷种子,不得不说这个网站还是比较良心,相较于只发图不留种的某些网站。按照正常逻辑,此时我应该点开资源地址静静地欣赏起来(不对,其实我不是那样的人),因此我选择默默地将资源添加到网盘收藏。看到网盘又多了几部佳作,心情顿时爽了很多,但仅仅添加几部作品并没有满足我的收藏欲望,于是我便开始探索如何快速将视频资源自动添加到百度网盘,也由此引发了我对于百度网盘的一系列斗争。
战争序幕
首先通过观察该网站url构成,以及网页源码组成,我决定采用爬取的方式采集资源链接地址。
网页截图:
该过程并没有遇到很大的问题,我采用了python+协程的方式进行采集,很快便获取了一部分资源地址:
百度网盘资源地址:
写完采集数据脚本,采集完部分数据已是晚上11点,原本应该洗洗睡了,然而技术探索的力量鼓舞着我继续前行。目前资源地址都有了,然而对于百度网盘资源,仍然需要一一点开,然后添加到我的网盘,此步骤太耗费精神,因此我决定继续挖掘自动添加资源到百度网盘的方法。
注意:以下内容是本文的重点技术内容,关乎着我与百度网盘一战的最终结局,请勿走开,精彩继续。
终极之战
首先我通过抓包,查看源码,审查元素等方式分析了百度分享页面的特征,判断其是否适合爬虫方式。
在经过一系列测试之后,我发现虽然过程有点曲折,但还是可以用爬虫的方式实现自动化的添加资源到网盘。
要实现这一技术,我总结了以下几点流程:
- 获取用户cookie(可以手动登录然后抓包获取)
- 首先爬取如:http://pan.baidu.com/s/1o8LkaPc网盘分享页面,获取源码。
- 解析源码,筛选出该页面分享资源的名称、shareid、from(uk)、bdstoken、appid(app_id)。
- 构造post包(用来添加资源到网盘),该包需要用到以上4个参数+cookies。
获取cookie
抓取cookie可以用很多工具,我用了火狐的Tamper插件,效果如下:
获取登录的数据包:
查看登录发送的请求包,发现有账号密码,当然我们这里需要的是cookie,可以在response中查看到。
cookie的格式如下:
由于此cookie涉及到个人账号,因此我做了改动处理,但格式应该是一样的。
访问百度资源分享页面
请求页面如:http://pan.baidu.com/s/1o8LkaPc
获取cookie以后,可以在访问百度资源分享页面时,在headers里面写入cookie值,并使用该cookie登录,期间我也失败过几次,原因还是需要加上其他header参数(如果不加cookie参数,返回的结果将是”页面不存在”)。
请求成功之后,我们可以在源码中找到一些我们需要的内容,比如页面分享资源的名称、shareid、from(uk)、bdstoken、appid(app_id)值。
构造添加资源POST包
首先看下post包的构造:
在post包的url中有一些参数,填写我们获取到的内容即可,还有一个logid参数,内容可以随便写,应该是个随机值然后做了base64加密。
在post包的payload中,filelist是资源名称,格式filelist=[“/name.mp4”],path为保存到那个目录下,格式path=/pathname
cookie必须填上,就是之前我们获取到的cookie值。
最终返回内容
|
|
最终如果看到以上内容,说明资源已经成功添加到网盘,如果errno为其他值,则说明出现了错误,12代表资源已经存在。
战绩
花费了近1个小时之后,我写完了代码,其中大部分时间主要花费在调试与研究数据包上,期间遇到了很多坑,但最终还是解决了。
欣赏下程序运行时的快感吧:
百度网盘的战果:
搞完这些,写下这篇文章差不多快半夜12点了,视频资源我只跑了一小部分,其余的明天继续。(为了看点视频容易吗我?!)
明天我会放出源代码,今天先共享下我的网盘吧:https://pan.baidu.com/s/1nvz74Vn
项目GitHub地址:https://github.com/tengzhangchao/BaiDuPan