读书笔记,urlretrieve函数解析

By admin in 4858.com on 2019年4月5日

Python urllib urlretrieve函数解析

urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。

urllib 模块
urllib 提供了然三个高档的 Web 沟通库,帮衬 Web 协议, HTTP, FTP 和
Gopher 协议,同时也援救对地点文件的拜会。urllib
模块的特别效果是应用上述协议下载数据(从因特网、局域网、主机上下载)

读书笔记,urlretrieve函数解析。API定义:

利用urllib.request.urlretrieve函数下载文件

urlretrieve(url, filename=None, reporthook=None, data=None)

1.1、urllib.urlopen()

一.一.1、urlopen() 打开三个给定 U奇骏L 字符串与 Web
连接,并回到了文件类的靶子。语法结构如下:
urlopen(urlstr, postQueryData=None)
备注:postQueryData用于post请求时传递参数

1.1.二、urlopen再次回到 2个类公事对象,它提供了之类方法:
read() , readline() , readlines() , fileno() , close()
:那几个办法的利用方法与公事对象完全相同;
info():再次来到1个httplib.HTTPMessage 对象,表示远程服务器再次回到的头音信
getcode():重返Http状态码。假诺是http请求,200代表请求成功做到;404意味着网址未找到;
geturl():重返请求的url;

urllib.request.urlretrieve(url,filename=None,reporthook=None, data=None)

认为可行的话,欢迎一起谈论相互学习~Follow Me

参考文献
Urlretrieve函数解析

  • 参数filename钦定了保留本地路径(假如参数未内定,urllib会生成2个权且文件保存数据。)
  • 参数reporthook是1个回调函数,当连接上服务器、以及对应的数码块传输截至时会触发该回调,大家能够应用这些回调函数来呈现当前的下载速度。
  • 参数data指post导服务器的数码,该形式重返三个富含多少个因素的(filename,
    headers) 元组,filename
    表示保留到地面的路径,header代表服务器的响应头

1.2、urllib.urlretrieve()

urlretrieve(url, filename=None, reporthook=None,data)

url:外部也许本地url
filename:钦赐了封存到本地的路径(假诺未钦命该参数,urllib会生成贰个一时半刻文件来保存数据);
reporthook:是三个回调函数,当连接上服务器、以及对应的数据块传输甘休的时候会触发该回调。大家得以应用那么些回调函数来突显当前的下载速度。
data:指post到服务器的数据。该情势重返叁个蕴涵四个要素的元组(filename,
headers),filename表示保留到地点的路径,header代表服务器的响应头。

举例:

import urllib
def callbackfunc(blocknum, blocksize, totalsize):
    '''回调函数
    @blocknum: 已经下载的数据块
    @blocksize: 数据块的大小
    @totalsize: 远程文件的大小
    '''
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print "%.2f%%"% percent
url = 'http://www.sina.com.cn'
local = 'D:\\python_web\\thread\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)

运用urlretrieve() 将数据下载到本地。

urllib.request.urlretrieve函数解析

urlretrieve(url, filename=None, reporthook=None, data=None)
参数 finename
内定了封存本地路径(假使参数未钦赐,urllib会生成二个暂时文件保存数据。)
参数 reporthook
是3个回调函数,当连接上服务器、以及对应的数额块传输停止时会触发该回调,大家能够利用那些回调函数来体现当前的下载速度。
参数 data 指 post 到服务器的多少,该办法重临二个含有五个因素的(filename,
headers)元组,filename 表示保留到地面的门路,header 代表服务器的响应头。

  • 下边通过例子来演示一下以此法子的应用,这些例子将一张图片抓取到本地,保存在此文件夹中,同时彰显下载的快慢。

from six.moves import urllib


def Schedule(a, b, c):
    """
    a:已经下载的数据块
    b:数据块的大小
    c:远程文件的大小
    """
    per = 100.0*float(a*b)/float(c)
    if per > 100:
        per = 100
    print("a", a)
    print("b", b)
    print("c", c)
    print('{:.2f}%'.format(per))


url = 'https://avatars1.githubusercontent.com/u/14261323?s=400&u=150449ce27748c3b23b5175f8c8342c918ae6aa8&v=4'
local = 'mylogo.png'
filename, _ = urllib.request.urlretrieve(url, local, Schedule)
# ('mylogo.png', <http.client.HTTPMessage object at 0x000001FD6491D6D8>)
print(filename)
# mylogo.png

# a 0
# b 8192
# c 38225
# 0.00%
# a 1
# b 8192
# c 38225
# 21.43%
# a 2
# b 8192
# c 38225
# 42.86%
# a 3
# b 8192
# c 38225
# 64.29%
# a 4
# b 8192
# c 38225
# 85.72%
# a 5
# b 8192
# c 38225
# 100.00%

将baidu的html抓取到本地,保存在”./baidu.html”文件中,同时出示下载的速度。

– 参数 finename
内定了封存本地路径(若是参数未钦点,urllib会生成四个方今文件保存数据。)

    #!/usr/bin/env python  
    # coding=utf-8  
    import os  
    import urllib  

    def cbk(a,b,c):  
        '''''回调函数 
        @a:已经下载的数据块 
        @b:数据块的大小 
        @c:远程文件的大小 
        '''  
        per=100.0*a*b/c  
        if per>100:  
            per=100  
        print '%.2f%%' % per  

    url='http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'  
    dir=os.path.abspath('.')  
    work_path=os.path.join(dir,'Python-2.7.5.tar.bz2')  
    urllib.urlretrieve(url,work_path,cbk)  

 

 

– 参数 reporthook
是三个回调函数,当连接上服务器、以及相应的数码块传输停止时会触发该回调,大家能够运用那些回调函数来体现当前的下载速度。

urlopen()能够轻松取得远端html页面音讯,然后经过Python正则对所需求的多少进行分析,相称出想要用的多寡,再选取urlretrieve()将数据下载到本地。对于访问受限恐怕对连接数有限量的远程url地址可以接纳proxies(代理的办法)连接.

 

– 参数 data 指 post
到服务器的数据,该办法重回1个含有五个成分的(filename,
headers)元组,filename 表示保留到地方的不二等秘书诀,header 表示服务器的响应头。

用法:

>>> import urllib.request
>>>local_filename,headers=urllib.request.urlretrieve('http://python.org/')
>>> html = open(local_filename)
>>> html.close()

 

注意:当html=open(local_4858.com ,filename),然后lines=html.readlines()时大概会油不过生unicode错误

拍卖措施:html=open(local_filename,’utf-捌’)那样就会一下子就解决了unicode难点。

例子:抓取web页面

#coding:utf-8
from urllib.request import urlretrieve

def firstNonBlank(lines):
    for  eachLine in lines:
        if not eachLine.strip():
            continue
        else:
            return eachLine

def firstLast(webpage):
    f=open(webpage,encoding='utf-8')
    lines=f.readlines()
    f.close()
    print(firstNonBlank(lines))
    lines.reverse()
    print(firstNonBlank(lines))

def download(url='http://www.baidu.com',process=firstLast):
    try:
        retval=urlretrieve(url)[0]
    except IOError:
        retval=None
    if retval:
        process(retval)

if __name__=="__main__":
    download()

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有