威尼斯人线上娱乐

读书笔记,urlretrieve函数解析

20 4月 , 2019  

Python urllib urlretrieve函数解析

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

urllib 模块
urllib 提供理解一个高等的 Web 交换库,帮忙 Web 协议, HTTP, FTP 和
Gopher 协议,同时也支撑对该半夏件的走访。urllib
模块的特有成效是运用上述协议下载数据(从因特网、局域网、主机上下载)

API定义:

接纳urllib.request.urlretrieve函数下载文件

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

1.1、urllib.urlopen()

1.1.1、urlopen() 张开多少个给定 UWranglerL 字符串与 Web
连接,并再次回到了文件类的目标。语法结构如下:
urlopen(urlstr, postQueryData=None)
备注:postQueryData用于post请求时传递参数

一.1.二、urlopen再次来到 三个类公事对象,它提供了如下方法:
读书笔记,urlretrieve函数解析。read() , readline() , readlines() , fileno() , close()
:那些方法的运用情势与公事对象完全同样;
info():重返叁个httplib.HTTPMessage 对象,表示远程服务器重返的头新闻
getcode():重临Http状态码。借使是http请求,200意味请求成功实现;40四表示网站未找到;
geturl():重返请求的url;

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

感觉可行的话,招待一同商讨互相学习~Follow Me

参考文献
Urlretrieve函数解析

  • 参数filename钦命了保留本地路线(借使参数未内定,urllib会生成一个目前文件保存数据。)
  • 参数reporthook是1个回调函数,当连接上服务器、以及相应的多寡块传输甘休时会触发该回调,大家能够使用那些回调函数来展现当前的下载速度。
  • 参数data指post导服务器的数码,该办法重回1个分包七个成分的(filename,
    headers) 元组,filename
    表示保留到本地的门路,header表示服务器的响应头

1.2、urllib.urlretrieve()

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

url:外部只怕当地url
filename:钦命了封存到地头的门路(倘诺未钦命该参数,urllib会生成二个权且文件来保存数据);
reporthook:是2个回调函数,当连接上服务器、以及相应的多寡块传输截止的时候会触发该回调。大家得以应用那个回调函数来体现当前的下载速度。
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
是1个回调函数,当连接上服务器、以及对应的数据块传输截至时会触发该回调,大家得以利用那些回调函数来展示当前的下载速度。
参数 data 指 post 到服务器的数目,该办法重回1个包括五个要素的(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
到服务器的数据,该格局再次回到3个含有五个成分的(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_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地图