第十二章:互联网-urllib.parse:分解URL-解析

第十二章:互联网
12.1 urllib.parse:分解URL
urllib.parse模块提供了一些函数,可以管理URL及其组成部分,这包括将URL分解为组成部分以及由组成部分构成URL。

12.1.1 解析
urlparse()函数的返回值是一个parseResult对象,其相当于一个包含6个元素的tuple。

from urllib.parse import urlparse

url = 'http://netloc/path;param?query=arg#frag'
parsed = urlparse(url)
print(parsed)

通过元组接口得到的URL各部分分别是机制、网络位置、路径、路径段参数(由一个分号将路径分开)、查询以及片段。
运行结果:
在这里插入图片描述
尽管返回值相对于一个元组,但实际上它基于一个namedtuple,这是tuple的一个子类,除了可以通过索引访问,它还支持通过命名属性访问URL的各部分。属性API不仅更易于程序员使用,还允许访问tuple API中未提供的很多值。

from urllib.parse import urlparse

url = 'http://user:pwd@NetLoc:80/path;param?query=arg#frag'
parsed = urlparse(url)
print('scheme  :',parsed.scheme)
print('netloc  :',parsed.netloc)
print('path    :',parsed.path)
print('params  :',parsed.params)
print('query   :',parsed.query)
print('fragment:',parsed.fragment)
print('username:',parsed.username)
print('password:',parsed.password)
print('hostname:',parsed.hostname)
print('port    :',parsed.port)

输入URL中可能提供用户名(username)和密码(password),如果没有提供就设置为None。主机名(hostname)与netloc值相同,全为小写并且去除端口值。如果有端口(port),则转换为一个整数,如果没有则设置为None。
运行结果:
在这里插入图片描述
urlsplit()函数可以替换urlparse(),但行为稍有不同,因为它不会从URL分解参数,这对于遵循RFC 2396的URL很有用(支持对应路径每一段的参数)。

from urllib.parse import urlsplit

url = 'http://user:pwd@NetLoc:80/p1;para/p2;para?query=arg#frag'
parsed = urlsplit(url)
print(parsed)
print('scheme  :',parsed.scheme)
print('netloc  :',parsed.netloc)
print('path    :',parsed.path)
print('query   :',parsed.query)
print('fragment:',parsed.fragment)
print('username:',parsed.username)
print('password:',parsed.password)
print('hostname:',parsed.hostname)
print('port    :',parsed.port)

由于没有分解参数,tuple API会显示5个元素而不是6个,并且这里没有params属性。
运行结果:
在这里插入图片描述
要向从一个URL剥离出片段标识符,如从一个URL查找基页面名,可以使用urldefrag()。

from urllib.parse import urldefrag

original = 'http://netloc/path;param?query=arg#frag'
print('original:',original)
d = urldefrag(original)
print('url     :',d.url)
print('fragment:',d.fragment)

返回值是一个基于nametuple的DefragResult,其中包含基URL和片段。
运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值