Python的urllib模块提供了一个高级的Web通信库,支持基本的协议,如HTTP、FTP和Gopher,同时也支持对本地文件的访问。在Python3中,urllib、urlparse、urllib2等都整合进一个名为urllib的单一包中。urllib、urllib2的内容整合进了urllib.request模块中,urlparse整合进了urllib.parse模块中。Python3中的urllib包还包括response、error、robotparse这些子模块。下面就来看看Python3中核心模块urllib的用法大全吧。
urllib.parse
一般来说,一个URL的地址是可以分为六部分的。urllib.parse模块就是对Web网址进行解析,分解或合并成URL。主要的方法有urlparse、urlunparse、urljoin。示例代码如下:#!/usr/local/env python
# coding:utf-8
import urllib.parse
__author__ = "风轻清淡"
url = "https://www.noniu.com/module;path?id=12#22"
ret = urllib.parse.urlparse(url)
# 结果为:ParseResult(scheme='http', netloc='www.noniu.com', path='/module', params='path', query='id=12', fragment='22')
# 可以通过索引访问所有的结果,分别代表:网络协议、服务器地址、CGI应用路径、可选参数、查询的键值对、文档内定锚
print(ret)
url_str = ("http", "www.noniu.com", "/jiaocheng/228.html", "", "", "")
url_ret = urllib.parse.urlunparse(url_str)
# 结果为:https://www.noniu.com/jiaocheng/228.html
# urlunpars与urlparse相当于相反的操作
print(url_ret)
url_join = urllib.parse.urljoin("https://www.noniu.com/about/", "/jiaocheng/228.html")
# 结果为:https://www.noniu.com/jiaocheng/228.html
# urljoin方法将URL的根域名与新的路径拼合为一个完整的URL
print(url_join)
urllib.request
urllib.request模块中有urlopen、urlretrieve、quote等方法,具体的参数和功能见下表:urllib.request中的方法描述
urlopen(urlstr, postQueryData=https://www.noniu.com/jiaocheng/None)打开URL urlstr,如果是POST请求,则通过postQueryData发送请求的数据
urlretrieve(urlstr, localfile=None, downloadStatusHook=None)将URL urlstr中的文件下载到localfile或临时文件夹中(localfile没指定);如果函数正在执行,downloadStatusHook将获得下载的统计信息。
quote(urldata, safe="/")对urldata在URL中无法使用的字符进行编码,safe中的字符不做处理。
quote_plus(urldata, safe="/")除了将空格编码为+号(而非%20)之外,其他功能和quote没有区别
unquote(urldata)将urldata中编码过的字符解码
unquote_plus(urldata)除了将+号解码为空格之外,其他功能和unquote没有区别
urlencode(dict)将dict的键值对通过quote_plus编码为有效的CGI查询字符串
以下是urllib.request模块中具体方法的示例代码:#!/usr/local/env python
# coding:utf-8
import urllib.request
__author__ = "风轻清淡"
url = "https://www.noniu.com/index.php"
ret = urllib.request.urlopen(url)
# 结果为:b'\n'
# 连接成功后,urlopen返回一个文件类型对象,可以使用read、readline等文件操作方法进行读取,数据为字节类型。
print(ret.readline())
# 结果为:https://www.noniu.com/index.php
# geturl方法是考虑所有重定向后,获取真实的URL
print(ret.geturl())