计划做这样的多线程下载是因为xx云盘限速厉害,到了恶心的境界,我想试试用多线程下载xx云盘的资源是否能够实现加速。
xx云盘限速阐发
突破xx云盘的限速,利用python实现加速下载-1.jpg (20.14 KB, 下载次数: 0)
2018-6-9 23:10 上传
1. 关于限速,我测度有两种情况:
限制下载资源的带宽限制下载资源时的线程或者进程数目如果限速是第一种,多线程下载也无法提速。但如果是第二种限速,多线程下载理应能够显著提升下载速度,在一定规模内,提速的水平与下载的线程数目成正相关关系。即,下载的线程越多,下载总速度越快。
2. 多线程下载的具体思路如下:
获取待下载文件的年夜小 size将待下载文件分成 n 块,第 i 块年夜小为 subi ,n 个 subi 之和等于 size在下载进程中开启 n 个线程,每个线程负责下载一个 sub所有线程下载的资源依照原有顺序写入文件,完成后,该文件即为下载后的文件
xx云盘多线程加速下载,具体实现如下
1. 获取待下载文件的 size
以下载 python 2.7 为例,下载链接:点我下载,点击该链接时,应该会直接弹出下载窗口。通常,文件年夜小,文件名等信息都在请求 headers 里,python 可用如下代码获取该文件 headers:
突破xx云盘的限速,利用python实现加速下载-2.jpg (62.41 KB, 下载次数: 0)
2018-6-9 23:10 上传
2. 将下载文件分为 n 个小块
这一步其实就是简单的数学题了,下面直接上代码,以 n=5 等分为例,如下:
突破xx云盘的限速,利用python实现加速下载-3.jpg (42.43 KB, 下载次数: 0)
2018-6-9 23:10 上传
可见,文件被 5 等分了,因为 size 不克不及被 5 整除,所以最后一段比之前 4 段都长一些。
3. python下载文件的指定区间
这里先提供一个 python 下载文件的简单代码作为参考,究竟结果越简单,越容易理解:
突破xx云盘的限速,利用python实现加速下载-4.jpg (15.09 KB, 下载次数: 0)
2018-6-9 23:10 上传
假设文件年夜小为 100 个字节,上面这几行代码是下载整个文件的,那么,怎样才能够下载指定区间的文件呢?好比我想下载 20-40 字节段的文件,怎么实现呢?体例如下,还是直接上代码:
突破xx云盘的限速,利用python实现加速下载-5.jpg (22.03 KB, 下载次数: 0)
2018-6-9 23:10 上传
上面几行代码下载的文件即为原文件的 20-40 字节段。
4. python 将内容写到文件指定位置处
第 3 节中提供的代码,实际上是将下载的 20-40 字节段写到 filename 的 0-20 位置了。这样一来,虽然内容被下载了,可是却没有放在文件正确的位置处,最终即使所有字节都下载了,文件也是无法打开的。那么,如何将 20-40 字节段内容写到 filename 的 20-40 位置呢?其实只需要添加一行 seek 代码,指定一下写文件的起始位置即可,如下:
突破xx云盘的限速,利用python实现加速下载-6.jpg (25.46 KB, 下载次数: 0)
2018-6-9 23:10 上传
5. python 多线程高速下载
在第 3、4 节基础上,写下如下函数:
突破xx云盘的限速,利用python实现加速下载-7.jpg (24.37 KB, 下载次数: 0)
2018-6-9 23:10 上传
该函数将从 url 下载 spos-fpos 段的内容,写到 fp 的指定位置处。结合第 1、2 节,开 n 个线程下载 python 2.7,具体代码如下,直接采取了 threading 库:
突破xx云盘的限速,利用python实现加速下载-8.jpg (56.38 KB, 下载次数: 0)
2018-6-9 23:10 上传
打印结果如下:
突破xx云盘的限速,利用python实现加速下载-9.jpg (15.81 KB, 下载次数: 0)
2018-6-9 23:10 上传
可见,该程序很快的将文件下载了,速度达到 9M/s 以上。文件也可以正常打开,如下图:
突破xx云盘的限速,利用python实现加速下载-10.jpg (43.1 KB, 下载次数: 0)
2018-6-9 23:10 上传
6. 测试下载被限速的xx云盘,观察是否提速成功
第 5 节提供的下载 python 2.7 文件没有被限速,不克不及体现本贴程序的提速性能。接下来,测试下载被恶心限速的 xx 云盘的文件,采取的下载链接可以自行从自己的云盘里提取:
突破xx云盘的限速,利用python实现加速下载-11.jpg (30.52 KB, 下载次数: 0)
2018-6-9 23:10 上传
我的url是 https://nj01ct01.百度pcs.com/file/…
直接采取浏览器下载时,速度最快达到 18KB/s,且经常呈现速度为 0 的情况,下载 3m 多点的文件用了 好几分钟,如下图:
突破xx云盘的限速,利用python实现加速下载-12.jpg (12.32 KB, 下载次数: 0)
2018-6-9 23:10 上传
突破xx云盘的限速,利用python实现加速下载-13.jpg (11.58 KB, 下载次数: 0)
2018-6-9 23:10 上传
采取本帖下载时,输出如下,用时 65 秒,速度 51 KB/s:
突破xx云盘的限速,利用python实现加速下载-14.jpg (13.48 KB, 下载次数: 0)
2018-6-9 23:10 上传
速度提升了 5 倍,我们增加线程数,即增年夜加速倍数,再试。将线程数目增加到 30,即 令 n=30 时,同样下载该链接,输出如下,用时 12s, 速度 279 KB/s,速度提升了 30 倍:
突破xx云盘的限速,利用python实现加速下载-15.jpg (17.28 KB, 下载次数: 0)
2018-6-9 23:10 上传
可见,采取本帖提供的 python 多线程下载xx网盘,简直可以显著提升下载速度。
写在最后
固然,这里只是提供了一种加速下载的方案,代码都是demo级的,可能会有bug,有机会的话,我会把它完善成一个下载工具。
原帖:python拭魅战小项目,多线程百度云盘下载,突破限速,超出迅雷超高速下载|向日葵智能
点击了解更多,可获得更加详细的信息。
更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复