一、概述
urllib模块提供了用于获取万维网(the World Wide Web)数据的高层接口。特别是urlopen()函数,它很像内建函数open(),但是它接收的参数不是文件名,而是URLs。
二、高级层次接口
1、urllib.urlopen(url[, data[, proxies]])
打开URL所指示的网络上的对象。
如果该URL没有指明协议类型,或者其协议标识符为file:,则该函数会打开本地文件;否则它会使用socket连接网络上的某个服务器。 如果连接失败,会抛出IOError异常。如果一切顺利,返回一个类文件对象。该对象拥有以下方法:read(),readline(),readlines(),fileno(),close(),info(),getcode() 和geturl(),同时也支持iterator。
geturl()函数返回网页的真实URL。有时,HTTP服务器会将client重定向至另一个URL。显然,urlopen()函数可以处理这种情况,但是有时调用者希望知道client被重定向到了哪个URL处。geturl()函数用于获得重定向后的URL。
如果urlopen中提交的URL不是一个HTTP的URL,那么getcode()方法返回None,否则返回HTTP响应发送回来的HTTP状态码。
2、urllib.urlretrieve(url[, filename[, reporthook[, data]]])
把URL所指定的资源复制到本地文件夹中。
如果URL指向一个本地文件或有效的缓存拷贝对象,则该对象不会复制。当filename是本地文件并且对象无法找到时,返回一个元组(filename, headers)。
如果存在第二个参数,则在该位置复制;如果没有,该位置将生成一个临时文件。
如果存在第三个参数,这是一个钩子函数,它将在建立网络连接后调用一次,每读一个块(block)也调用一次。
三、实用的函数
1、urllib.quote(string[, safe])
使用%xx 转义替换string 中的特殊字符。
字母、数字和'_.-' 字符永远不会转义。默认情况下,这个函数用于转义URL中的路径部分。可选的safe 参数指出其它不应该转义的字符 —— 默认值为'/'。
例如:quote('/~connolly/') 得到'/%7econnolly/'。
2、urllib.unquote(string)
从%xx转义转换成单字节字符串。
例如: unquote('/%7Econnolly/') 得到'/~connolly/'.
注意事项:
在Python 3中,urllib模块已经被拆分为urllib.request,urllib.parse和urllib.error。当您将代码转换为Python 3时,2to3 工具可以对代码的imports部分进行自动修改。注意,Python 3中的urllib.request.urlopen()函数相当于urllib2.urlopen(),而urllib.urlopen()函数已被Python 3移除。