urllib模块中的几个重要函数

rullib模块提供了一系列从指定rul中下载数据,同时也可以对字符串进行编码、解码工作的函数,一边在url中可以正确的显示出来。以下常用函数:urlopen(), rulretrieve(), quote(), unquote(), quote_plus(), unquote_plus()和urlencode()。

1、urlopen():打开一个给定的URL字符串表示的web链接,返回文件类型的对象。

语法:urlopen(urlstr, postQueryData=None)

urlstr如果没有给定协议或者下载方案,或者传入了file方案,urlopen就会打开本地文件;

一旦链接成功,urlopen会返回一个文件类型对象,就像在目标路径下打开了一个可读文件。例如,如果文件对象是f,那么“句柄”会支持一些读取内容的方法,如f.read() , f.readline() , f.readlins() , f.close() , f.fileno()。

说明:2.6和3.0版本的python中使用urllib2.urlopen()。2.6版本开始,urllib中废弃了urlopen,而在3.0中移除了该函数,3.x版本中需要使用urllib.request.urlopen()。

2、urllib.urlretrieve():下载完整的html,另存为文件,其语法如下:

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

urlretrieve()返回一个二元组(filename,mine_hdrs)

>>> filename = urllib.urlretrieve('http://www.google.com.hk/',filename='/home/dzhwen/python文件/Homework/urllib/google.html')
>>> type(filename)
<type 'tuple'>
>>> filename[0]
'/home/dzhwen/python\xe6\x96\x87\xe4\xbb\xb6/Homework/urllib/google.html'
>>> filename[1]
<httplib.HTTPMessage instance at 0xb6e2c38c>


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

若果提供了reporthook这个回调函数,则在每块数据下载或传输完成后会调用这个函数。调用时使用以下3个参数:目前读入块数,块的字节数和总字节数。

例子:

#!/usr/bin/python
#encoding:utf-8
import urllib
import os
def Schedule(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'
#local = url.split('/')[-1]
local = os.path.join('/data/software','Python-2.7.5.tar.bz2')
urllib.urlretrieve(url,local,Schedule)
######output######
#0.00%
#0.07%
#0.13%
#0.20%
#....
#99.94%
#100.00%

3、urllib.quote()和rullib.quote_plus()

quote*()函数用来获取URL数据,并将其编码,使其可以用于URL字符串中。具体来说就是必须对某些不能打印的活着不被web服务器作为有效URL接收的特殊字符串进行转换。

为什么需要转换请参看https://blog.csdn.net/likunshan/article/details/80882465;

4、urllib.urlencode()

urllencode()函数接受字典的键值对,并将其编译成字符串,作为CGI请求的URL字符串的一部分。

>>> from urllib import urlencode
>>> data = {
...     'a': 'test',
...     'name': 'test_name'
... }
>>> print urlencode(data)
a=test&name=test_name

为什么要组成如此形式参见:

URL 的post和get形式请求;




猜你喜欢

转载自blog.csdn.net/likunshan/article/details/80876443