如何使用python来自动保存百度网盘资源-这样的操作你会吗?

开始

在上一文中,我们保存了百度云盘的地址和提取码,但是这种分享链接很容易被屏蔽,最好的做法就是保存资源到自己的网盘,不过采集的链接有上万个,人肉保存并不现实,所以本文尝试了批量保存资源,如您还没看过上文,这里可以跳转。

爬虫学习3:搭建自己的电影资源网保姆式教学

观察请求

以下面资源链接为例:

在浏览器中输入以上链接,会自动跳转到 https://pan.baidu.com/share/init?surl=tHSxZQueF-Wsa2T0NlT3vQ ,

输入正确提取码后发现直接跳转到资源保存页面了,F12 NETWORK里也看不到此请求的返回值,这时候只能使用Fiddler才能抓到包了。

Fiddler抓包

打开Fiddler,为了不让其它各类请求影响到我们,首先进行简单设置,以此来显示我们想要的请求,点击Filters 进行如下设置,最后点击Actions里的Run Filterset now,就只会显示 pan.baidu.com 域名的请求:

测试post数据

为了得到点击提取文件按钮时发送的请求和post的数据,先尝试输入一个错误的提取码123,查看请求:

https://pan.baidu.com/share/verify?surl=tHSxZQueF-Wsa2T0NlT3vQ&t=1593142082616&channel=chunlei&web=1&app_id=250528&bdstoken=855345cbf66bbfba3d30d5e201ea346f&logid=MTU5MzE0MjA4MjYyMDAuNTM5MjA2Nzg2ODEyNTcxNA==&clienttype=0

看来上面这个url就提取数据的请求,接下来具体看一下都提交了哪些数据:

Form Data中的pwd就是刚才输入的错误提取码,而其它两个参数vcode和vcode_str在没有验证码的情况下也不用管,再看看Query String中的参数,为了测试这些参数有哪些是变化的,我挑选了一些资源链接去尝试,具体过程就省略了,总结如下:

Query String参数是否变化
surl即资源链接中的最后部分,可直接获取
t时间戳,可直接获取
channel固定
web固定
app_id固定
bdstoken固定
logid变化
clienttype固定
Form Data参数是否变化
pwd即提取码
vcode
vcode_str

从上面表格来看,需要手动获取的就是logid,稍微有点经验的话应该都能想到这会不会是js动态生成的,抱着这个心态来到sources标签下,搜索logid关键字,果不其然,有个JS文件里有这个参数,直接定位到相应的行数:

直接在68行打一个断点,查看运行状态:

细心的同学一个很快就能发现上图红框里的值就是第一次请求 https://pan.baidu.com/share/init?surl=tHSxZQueF-Wsa2T0NlT3vQ cookies里的 BAIDUID 的值, logid 就是通过上面一些js代码中的一些算法得到的,cookies如下:

BIDUPSID=EC39F255CF7B146E8ADD4FA37DB16739;BAIDUID=BBBC2B2C1269AF3AA7D113D07FAC5E80:FG=1;  PSTM=1587390447; PANWEB=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDCLND=C4jsJ4aHacfrqq02TYbUOKGFFDefnJAMNmU%2BI3v5FNM%3D;

水平有限,没办法将这段js改写为python,不过好在python提供了一个执行js代码的库 pyexecjs ,该库运行于Nodejs环境,首先要保证你的机器安装了Nodejs:

pip install pyexecjs

下图即代表安装正确了,execjs可以正常使用

将js代码稍微修改一下,保存为 yunpan.js :

使用execjs执行一下

得到所有的变化参数后就可以提交数据了:

通过Fiddler抓包发现返回的res为下,errno为0即代表提交成功:

{"errno":0,"err_msg":"","request_id":8738382064533520558,"randsk":"g2VwUSYs1KSuOMh9%2FQDVUUwc7ICFq4CZNmU%2BI3v5FNM%3D"}

留意上面的 randsk 。

如果你是用浏览器抓包就会发现输对提取码点击按钮后请求会全部刷新一次,就不能确认到底是哪个请求跳转到资源页面的,只能使用Fiddler才能抓到 POST 成功后的请求,经过测试,发现POST数据后又再次请求了 https://pan.baidu.com/s/1wy0LC4O6iY7l9M6RD25k6w 这个链接,没错,就是上面一开始请求的链接,区别就是这次请求cookie中携带了刚才返回的 randsk 的值。所以再次请求时添加上 randsk :

保存资源

抓包分析

抓包保存资源链接发现为:

#保存链接
https://pan.baidu.com/share/transfer?shareid=4180912663&from=2693937402&ondup=newcopy&async=1&channel=chunlei&web=1&app_id=250528&bdstoken=7a8e1e34b454fd27de65b7662f67c2fa&logid=MTU5MzE4MTYzNDY0NDAuOTE1MzE0NDI5MzI1NTY4OA==&clienttype=0"

Query String 和 Form Data 为:

Query String大部分参数都提到过,可以参考上面,这里出现了新的两个参数 shareid 和 from ,经过测试除了这两个参数和上文中 logid ,其它参数均为固定。

Form Data参数是否变化
fsidlist变化
path你自己选择保存的路径,约等于固定
type固定

到这里又稍微被 shareid 和 from 、 fsidlist 三个参数卡住了,在页面中搜索这三个参数也没有结果,在source中搜索了一下,倒是又一个shareid,但是貌似也关系不大,折腾了一会就想到既然参数名搜不到,那我搜一下参数值试试?,果然在资源页面中搜到了三个参数的值(即 https://pan.baidu.com/s/1wy0LC4O6iY7l9M6RD25k6w 这页面),如下图:

正则表达式即可提取出三个值。

转存

转存时候注意cookie里要携带 BDUSS 和 STOKEN ,这两个参数在资源页面的cookies里,且都为固定的,没有登录的话只有 STOKEN , BDUSS 的值要在登录状态下才能看到,下图时登录后的cookie:

代码如下:

完结,撒花

到这里就结束了,本文讲解了如何使用python转存百度云盘资源。

 


此文转载文,著作权归作者所有,如有侵权联系小编删除!

原文地址:http://www.cnblogs.com/luohua13950/p/13723860.html

 

如需要源代码点击这里下载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
python学习课件+python源码90个合集: 002用Python设计第一个游戏(课件+源代码) 004改进我们的小游戏(课件+源代码) 005闲聊之Python的数据类型(课件+源代码) 007了不起的分支和循环(课件) 008了不起的分支和循环2(课件+源代码) 009了不起的分支和循环3(课件+源代码) 017函数:Python的乐高积木(课件+源代码) 019函数:我的地盘听我的(课件+源代码) 022函数:递归是神马(课件+源代码) 023递归:这帮小兔崽子(课件+源代码) 024递归:汉诺塔(课件+源代码) 028文件:因为懂你,所以永恒(课件+源代码) 029文件:一个任务(课件+源代码) 031永久储:腌制一缸美味的泡菜(课件+源代码) 034丰富的else语句及简洁的with语句(课件+源代码) 034丰富的else语句及简洁的with语句(课件+源代码)(1) 036类和对象:给大家介绍对象(课件 源代码) 037类和对象:面向对象编程(课件 源代码) 038类和对象:继承(课件 源代码) 039类和对象:拾遗(课件 源代码) 045魔法方法:属性访问(课件 源代码) 046魔法方法:描述符(Property的原理)(课件 源代码) 047魔法方法:定制序列(课件 源代码) 048魔法方法:迭代器(课件 源代码) 049乱入:生成器(课件) 050模块:模块就是程序(课件 源代码) 051模块:__name__=_'__main___'、搜索路径和包(课件 源代码) 052模块:像个极客一样去思考(课件) 053论一只爬虫的自我修养(课件) 054论一只爬虫的自我修养2:实战(课件 源代码) 055论一只爬虫的自我修养3:隐藏(课件 源代码) 056论一只爬虫的自我修养4:OOXX(源代码) 062论一只爬虫的自我修养10:安装Scrapy(课件+软件包) 063论一只爬虫的自我修养11:Scrapy框架之初窥门径(课件 源代码) 064GUI的终极选择:Tkinter(课件 源代码) 065GUI的终极选择:Tkinter2(源代码) 066GUI的终极选择:Tkinter3(源代码) 067GUI的终极选择:Tkinter4(源代码) 068GUI的终极选择:Tkinter5(源代码) 069GUI的终极选择:Tkinter6(源代码) 070GUI的终极选择:Tkinter7(源代码) 071GUI的终极选择:Tkinter8(源代码) 072GUI的终极选择:Tkinter9(源代码) 073GUI的终极选择:Tkinter10(源代码) 074GUI的终极选择:Tkinter11(源代码) 075GUI的终极选择:Tkinter12(源代码) 076GUI的终极选择:Tkinter13(源代码) 077GUI的终极选择:Tkinter14(源代码) 078Pygame:初次见面,请大家多多关照(源代码) 080Pygame:事件(源代码) 081Pygame:提高游戏的颜值1(源代码) 082Pygame:提高游戏的颜值2(源代码) 083Pygame:提高游戏的颜值3(源代码) 084Pygame:基本图形绘制(源代码) 085Pygame:动画精灵(源代码) 086Pygame:碰撞检测(源代码) 087Pygame:播放声音和音效(课件 源代码) 088Pygame:摩擦摩擦(源代码) 089Pygame:游戏胜利(源代码) 090Pygame:飞机大战1(源代码) 091Pygame:飞机大战2(源代码) 093Pygame:飞机大战4(源代码) 094Pygame:飞机大战5(源代码) 095Pygame:飞机大战6(源代码) 096Pygame:飞机大战7(源代码) easygui-docs-0.96 Pyhon之常用操作符(课件) 下载必看.txt 元组:戴上了枷锁的列表(课件) 函数:内嵌函数和闭包(课件) 函数:灵活即强大(课件) 列表:一个打了激素的数组2(课件) 列表:一个打了激素的数组3(课件) 列表:一个打了激素的数组(课件) 字典:当索引不好用时(课件) 字符串:各种奇葩的内置方法(课件) 字符串:格式化(课件) 小插曲之变量和字符串(课件) 序列!序列!(课件) 异常处理:你不可能总是对的(课件) 愉快的开始(课件)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值