python2 和 python3 中的 urllib
urllib 提供了一个高级的 web 通信库, 支持基本的 Web 协议, 如 HTTPFTP 和 Gopher 协议, 同时也支持对本地文件的访问
具体来说, urllib 模块的功能是利用前面介绍的协议来从因特网局域网本地主机上下载数据
使用这个模块就无须用到 httplibftplib 和 gopherlib 这些模块了, 除非需要用到更低层的功能
Python 2 中有 urliburlparseurllib2, 以及其他内容在 Python 3 中, 所有这些相关模块都整合进了一个名为 urllib 的单一包中
urlib 和 urlib2 中的内容整合进了 urlib.request 模块中, urlparse 整合进了 urllib.parse 中
Python 3 中的 urlib 包还包括 responseerror 和 robotparse 这些子模块
URL 的格式
prot_sch://net_loc/path;params?query#frag
URL 的各个部分(Web 地址的各个组件)
prot_sch 网络协议或下载方案
net_loc 服务器所在地(也含有用户信息)
path 使用斜杠 (/) 分割的文件或 CGI 应用的路径
params 可选参数
query 连接符 (&) 分割的一系列键值对
frag 指定文档内特定锚的部分
net_loc 可以进一步拆分成多个组件, 一些是必备的, 另一些是可选的:
user:passwd@host:port
user 用户名或登录
passwd 用户密码
host 运行 web 服务器的计算机名称或地址(必须的)
port 端口号(如果不是默认的 80)
urllib.parse 模块
在 python2 中叫做 urlparse, 在 python3 中已经改名为 urllib.parse
urllib.parse 模块提供了一些基本功能, 用于处理 URL 字符串这些功能包括 urlparse()urlunparse()和 urljoin()
urlparse()将 urlstr 解析成一个 6 元组(prot_sch, net_loc, path, params, query, frag):
语法: urlparse(urlstr, defProtSch=None, allowFrag=None)
- >>> urllib.parse.urlparse("https://www.smelond.com?cat=6")
- ParseResult(scheme=https, netloc=www.smelond.com, path=, params=, query=cat=6, fragment=)
urlunparse()的功能与 urlpase()完全相反, 其将经 urlparse()处理的 URL 生成 urltup 这个 6 元组(prot_sch, net_loc, path, params, query, frag), 拼接成 URL 并返回:
语法: urlunparse(urltup)
- >>> result = urllib.parse.urlparse("https://www.smelond.com")
- >>> print(result)
- ParseResult(scheme=https, netloc=www.smelond.com, path=, params=, query=, fragment=)
- >>> urllib.parse.urlunparse(result)
- https://www.smelond.com
在需要处理多个相关的 URL 时我们就需要使用 urljoin()的功能了, 例如, 一个 Web 页中可能会产生一系列页面 URL:
urljoin()取得根域名, 并将其根路径 (net_loc 及其前面的完整路径, 但是不包括末端的文件) 与 newurl 连接起来
语法: urljoin (baseurl, newurl, allowFrag=None)
- >>> urllib.parse.urljoin("https://www.smelond.com?cat=6","?cat=7")
- https://www.smelond.com?cat=7
- >>> urllib.parse.urljoin("https://www.smelond.com?cat=6","abc")
- https://www.smelond.com/abc
- >>> urllib.parse.urljoin("https://www.smelond.com?cat=6","/test/abc.html")
- https://www.smelond.com/test/abc.html
- >>> urllib.parse.urljoin("https://www.smelond.com","abc.html")
- https://www.smelond.com/abc.html
urllib.parse 模块中的核心函数描述
urlparse(urlstr,defProSch=None,allowFrag=None) 将 urlstr 解析成各个组件, 如果在 urlstr 中没有给定协议或方案, 则使用 defProtSch;allowFrag 决定是否允许有 URL 片段
urlunparse(urltup) 将 URL 数据 (urltup) 的一个元组拼成一个 URL 字符串
urljoin(baseurl, newurl, allowFrag=None) 将 URL 的根域名和 newurl 拼合成一个完整的 URL;allowFrag 的作用和 urlpase()相同
来源: http://www.bubuko.com/infodetail-2524578.html