欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  程序教程

Python3中核心模块urllib的用法大全

程序员文章站 2021-11-21 18:15:43
...

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'<!doctype html>\n'
# 连接成功后,urlopen返回一个文件类型对象,可以使用read、readline等文件操作方法进行读取,数据为字节类型。
print(ret.readline())
# 结果为:https://www.noniu.com/index.php
# geturl方法是考虑所有重定向后,获取真实的URL
print(ret.geturl())
相关标签: python教程