python之文件下载 (urllib模块urlretrieve方法)

有很多时候需要从服务端下载文件,比如更新客户端的版本, 从服务端下载文件进行解析等很多的时候选下载文件操作,今天记录一下python 从服务端下载文件的操作,

代码如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from urllib import urlretrieve

class software(object):

    def __init__(self):
        super(software, self).__init__()

    def start(self):

        url = ‘http://192.168.3.124:8074/ComputerSecConsole/upload/update/2.2/update.tar‘
        local = ‘./update.tar‘
        try:
            urlretrieve(url, local, self.callbackfunc)  #
        except Exception as e:
            print "Exception"

    def callbackfunc(self,blocknum, blocksize, totalsize):
        ‘‘‘回调函数
        @blocknum: 已经下载的数据块
        @blocksize: 数据块的大小
        @totalsize: 远程文件的大小
        ‘‘‘

        print  "blocknum  ",blocknum,"blocksize ",blocksize,"totalsize ",totalsize
        percent = 100.0 * blocknum * blocksize / totalsize
        if percent > 100:
            percent = 100
        print "%.2f%%" % percent,"    ",blocknum *blocksize,"    ",totalsize

if __name__ == ‘__main__‘:
    print("main")
    s = software()
    s.start()

运行结果:

[[email protected] text]# python text.py
main
blocknum   0 blocksize  8192 totalsize  788170240
0.00%      0      788170240
blocknum   1 blocksize  8192 totalsize  788170240
.................
100.00%      788168704      788170240
blocknum   96213 blocksize  8192 totalsize  788170240
100.00%      788176896      788170240

主要函数 :  urlretrieve

参数说明:
url:外部或者本地url
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头

但是此程序还不过完善,在下载大的文件中,突然断网,会出现死循环,下一部解决这个问题,  加油!!

原文地址:https://www.cnblogs.com/wanghuixi/p/12116005.html

时间: 2024-09-30 11:26:10

python之文件下载 (urllib模块urlretrieve方法)的相关文章

[转]urllib模块urlretrieve方法

直接将远程数据下载到本地 info: urllib.urlretrieve(url[, filename[, reporthook[, data]]])参数说明:url:外部或者本地urlfilename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据):reporthook:是一个回调函数,当连接上服务器.以及相应的数据块传输完毕的时候会触发该回调.我们可以利用这个回调函数来显示当前的下载进度.data:指post到服务器的数据.该方法返回一个包含两个元素的

Python爬虫之urllib模块1

本文来自网友投稿.作者PG,一个待毕业待就业二流大学生.玄魂工作室未对该文章内容做任何改变. 因为本人一直对推理悬疑比较感兴趣,所以这次爬取的网站也是平时看一些悬疑故事的网站,同时也是因为这个网站在编码上面和一些大网站的博客不同,并不那么规范,所以对于初学者还是有一定的挑战性的.我打算把这个爬虫分三次讲,所以每次都先完成一个小目标(当然不是一个亿啦),这次课我们先爬取当前页面的并且下载第一篇文章.第二次课我们就将爬取当前页面的=所有的链接进行下载,第三次课我们将把整个板块的文章都下载下来. 演示

Python爬虫进阶——urllib模块使用案例【淘宝】

很多时候呢,我们都是读取本地HTML文件来进行爬虫练手,但每次都要手打不同的HTML明显耗时耗力: 还有些小伙伴不喜欢F12,偏偏喜欢在Pycharm中查看HTML的源代码: -- 难道每次都只能"复制--新建--粘贴--保存"一条龙服务吗? 不不不,我们还有Python的第三方库--urllib. urllib模块是模拟浏览器去访问URL地址,然后拿到服务器响应回来的数据,也就是整个HTML文件. 代码如下: import urllib.request as ur # urlopen

Python下的select模块及方法解释

Python中有一个select模块,其中提供了:select.poll.epoll三个方法,分别调用系统的 select,poll,epoll 从而实现IO多路复用. Windows Python: 提供: select Mac Python: 提供: select Linux Python: 提供: select.poll.epoll 注意:网络操作.文件操作.终端操作等均属于IO操作,对于windows只支持Socket操作,其他系统支持其他IO操作,但是无法检测 普通文件操作 自动上次读

Python 学习之urllib模块---用于发送网络请求,获取数据

1.urllib urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块. (1)urllib.request用法 1)urlopen函数:用于打开一个URL(urlopen返回一个类文件对象,可以像文件一样操作) 例如: import urllib.request web=urllib.request.urlopen('http://www.baidu.com') conten

[python爬虫]使用urllib函数urlretrieve报错[socket error][Errno 10054]

为了练手,使用爬虫爬一个"你懂得"图床的,使用的是urlretrieve函数,不但速度慢,还总是会报错,不是open的timeout就是上面提到的socket error. 在网上找了许多办法诸如请求中加入headers.在调用urllib2.Request.urlopen().read()后需要调用close()等方法并未奏效. 由于不想麻烦scrapy等库,所以发现了个简单粗暴的办法: 直接使用urllib自带的open函数打开数据流,再以二进制写入文件保存: 参考代码段:其中注释

Python 学习之urllib模块---用于发送网络请求,获取数据(2)

接着上一次的内容. 先说明一下关于split()方法:它通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串(把一个字符串分割成很多字符串组成的list列表) 语法:str.split(str="", num=string.count(str)). 参数:str 分隔符,默认为空格.num 分割次数 返回值:返回分割后的字符串列表 例如:你需要将一个英语句子中的每一个单词拿出来单独处理,就可以将其进行分割. 如:a=' I am a new stude

Python 学习之urllib模块---用于发送网络请求,获取数据(5)

查询城市天气最后一节 需要导入上一节的结果city10.py #!/usr/bin/python# -*- coding: UTF-8 -*-import urllib.requestfrom  city10 import city     #从city10.py里导入city变量名称import json         #json包,loads的用法import traceback cityname=input('你想查询什么城市的天气?\n') citycode=city.get(city

Python 学习之urllib模块---用于发送网络请求,获取数据(3)

上节内容,是得到了省/直辖市编码,如web='http://m.weather.com.cn/data5/city01',我们需要继续获取此接口的数据,于是进行下面的操作 for  i  in   b:                #i=b[0],b[1],b[2]...... code=i.split('|')[0] web='http://m.weather.com.cn/data5/city%s' web1=web %code content2=urllib.request.urlope