免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1774 | 回复: 9
打印 上一主题 下一主题

如何下载制定链接的制定字节? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-23 17:31 |只看该作者 |倒序浏览
我想写一个多线程下载大文件的程序。
请问,但给定一个链接时,如何下载这个给定链接的给定字节的内容呢?
url='http://debian.cites.illinois.edu/pub/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-CD-1.iso'
import requests
r = requests.get(url).read(0,1000)  

我读取0到1000个字节,这样做不行,我测试了。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
2 [报告]
发表于 2014-07-24 10:41 |只看该作者
回复 1# luofeiyu_cu
在这个Active State的官网论坛链接有个相关的例子。

论坛徽章:
0
3 [报告]
发表于 2014-07-24 11:10 |只看该作者
那是一个下载ftp的例子。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
4 [报告]
发表于 2014-07-24 11:13 |只看该作者
回复 3# luofeiyu_cu
是个HTTP下载的例子,上面的英文的意思是,现在只支持HTTP,但是改成FTP的不麻烦。

论坛徽章:
0
5 [报告]
发表于 2014-07-24 16:36 |只看该作者
本帖最后由 luofeiyu_cu 于 2014-07-24 16:51 编辑

这个例子好长,很多地方看不懂,一点一点来问吧。
1. 原文的  self.h=[self]  ,把self实例做成一个list结构吗?
2.self.f=None  这个是要干什么?
3.它是多线程的下载吗?将一个文件切割成许多小部分,用http协议的socket 、asyncore  来下载?
4.我如何在命令行下使用mget.py 这个软件呢?

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
6 [报告]
发表于 2014-07-24 18:24 |只看该作者
回复 5# luofeiyu_cu
1. 原文的  self.h=[self]  ,把self实例做成一个list结构吗?
是用这个列表来保存实例列表,方便跟踪和管理。
2.self.f=None  这个是要干什么?
是当前实例的下载文件名所对应的打开句柄
3.它是多线程的下载吗?将一个文件切割成许多小部分,用http协议的socket 、asyncore  来下载?
不是多线程,是使用多个socket(asyncore)来进行的。
4.我如何在命令行下使用mget.py 这个软件呢?
参见源代码最后几行。

论坛徽章:
0
7 [报告]
发表于 2014-07-24 22:56 |只看该作者
我下载了那个链接文件,重新命名wget.py  存储在g:  ,我要从  

http://debian.cites.illinois.edu ... .6.0-amd64-CD-1.iso

下载,写了下面的命令,为何错误?
C:\Windows\system32>d:\Python27\python  g:\wget.py   debian.cites.illinois.edu     /pub/debian-cd/7.6.0/amd64/iso-cd/debian-7.6.0-amd64-CD-1.iso  5
Connecting...
Traceback (most recent call last):
  File "g:\wget.py", line 209, in <module>
    client = http_client(url[1],url[2],3)
  File "g:\wget.py", line 65, in __init__
    self.f = open(self.filename,'wb+')
IOError: [Errno 22] invalid mode ('wb+') or filename: ''

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
8 [报告]
发表于 2014-07-25 12:23 |只看该作者
回复 7# luofeiyu_cu

使用格式应当是:
python.exe mget.py url
就你这个case,应当是:
python.exe mget.py http://debian.cites.illinois.edu ... .6.0-amd64-CD-1.iso

论坛徽章:
0
9 [报告]
发表于 2014-07-25 14:02 |只看该作者
本帖最后由 luofeiyu_cu 于 2014-07-25 14:21 编辑

d:\Python27\python  g:\wget.py     http://debian.cites.illinois.edu ... .6.0-amd64-CD-1.iso
下载成功了,还有疑问。
1.从源代码来看

class http_client(asyncore.dispatcher):
    def __init__ (self,host,path,parts,pbegin=0,pend=0,m=None):

应该有host,path,parts  三个参数?

2.  if len(sys.argv) < 2:
        print 'usage: %s host' % sys.argv[0]

这个也不懂,如果只有一个参数,就是  python.exe mget.py ,print 的结果就是  usage: mget.py  host ??

3.如何使用timeit测量这个程序下载debian.iso的时间?

4.请介绍一下,这个程序运行的原理。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
10 [报告]
发表于 2014-07-25 15:52 |只看该作者
回复 9# luofeiyu_cu
1.从源代码来看

class http_client(asyncore.dispatcher):
    def __init__ (self,host,path,parts,pbegin=0,pend=0,m=None):

应该有host,path,parts  三个参数?
这三个参数是根据你的输入信息创建的。

2.  if len(sys.argv) < 2:
        print 'usage: %s host' % sys.argv[0]

这个也不懂,如果只有一个参数,就是  python.exe mget.py ,print 的结果就是  usage: mget.py  host ??
是的。

3.如何使用timeit测量这个程序下载debian.iso的时间?
你想多次下载这个文件来测速?
如果不是的话,你可以考虑把这个mget.py作为一个module,然后自己写两三行代码,记录下下载的开始和结束时间,完成之后计算下就出来使用时间了。

4.请介绍一下,这个程序运行的原理。
简单来说,是启动很多以8K为单位的异步套接字来下载,当套接字对应的8K buffer下载完成之后,把对应的数据写入文件,所有的块都写入之后,下载完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP