Python HTTP库 urllib之 parse 解析链接

urlib库里还提供了parse模块,这个模块定义了处理URL的标准接口,例如实现URL各部分的抽取、合并以及链接转换。它支持如下协议的URL处理:file、ftp、gopher、hdl、http、https、imap、mailto、mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、sip、sips、snews、svn、svn+ssh、telnet和 wais。

下面为urlparse各模块的用法:

1、urlparse 

urlparse可以实现URL的识别和分段,使用方法如下:

# ************************
# use method of urlparse
# ************************
from urllib.parse import urlparse
url = 'https://www.baidu.com/index.html;user?id=5#comment'
result = urlparse(url)
print(type(result))
print(result)

运行输出结果如下:

<class 'urllib.parse.ParseResult'>
ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

urlparse的解析结果是一个ParseResult对象,包含6个部分:scheme、netloc、path、param、query、fragment。

标准的URL格式:

scheme://netloc/path;params?query#fragment

urlparse 的API用法:

urlparse(urlstring, scheme='',allow_fragment=True)

urlparse有3个参数:

  • urlstring 即待解析的URL

  • scheme 指默认协议(例如 http 或 https 等)。如果待解析的 URL 没有带协议信息,就会将这个作为默认协议

  • allow_fragment 标志是否忽略 fragment。设置 False 标识 fragment 被忽略,fragment 会被解析为 path、params 或者 query 的一部分,而 fragment 部分为空。

2、urlunparse 

urlunparse 方法与 urlparse 方法相反,用于构造URL。接收的参数是一个可迭代对象,长度必须为6。使用方法如下:

# ************************
# use method of urlunparse
# ************************
from urllib.parse import urlunparse
data = ['https','www.baidu.com','index.html','user','id=5','comment']
url = urlunparse(data)
print(url)

运行输出如下:

https://www.baidu.com/index.html;user?id=5#comment

3、urlsplit 

urlsplit 与 urlparse 相似,不过它在解析时将 params 合并到 path 中,不再单独解析,只返回5个结果。使用方法如下:

# ************************
# use method of urlsplit
# ************************
from urllib.parse import urlsplit
url = 'https://www.baidu.com/index.html;user?id=5#comment'
result = urlsplit(url)
print(result)

运行输出如下:

SplitResult(scheme='https', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')

4、urlunsplit 

urlunsplit 与 urlunparse 类似,也是用于构造URL。接收的参数是一个可迭代对象,长度必须为5。使用方法如下:

# ************************
# use method of urlunsplit
# ************************
from urllib.parse import urlunsplit
data = ['https','www.baidu.com','index.html;user','id=5','comment']
url = urlunsplit(data)
print(url)

运行输出如下:

https://www.baidu.com/index.html;user?id=5#comment

5、urljoin 

urljoin 也是可以生成链接的一种方法,相对于 urlunparse 和 urlunsplit 来说不需要特定长度的对象,使用起来更加灵活。该方法具有两个参数 base_url 和 新连接。它会分析base_url 的 scheme、netloc、path,并对新链接缺失的部分进行补充,如果新连接不缺失的话,base_url 不起作用。使用方法如下:

# ************************
# use method of urljoin
# ************************
from urllib.parse import urljoin
url1 = urljoin('http://www.baidu.com','index.html')
url2 = urljoin('http://www.baidu.com', 'https://www.google.com/index.html')
print(url1)
print(url2)

运行输出如下:

http://www.baidu.com/index.html
https://www.google.com/index.html

6、urlencode

urlencode 在构造 GET 请求时非常有用,使用方法如下:

# ************************
# use method of urlencode
# ************************
from urllib.parse import urlencode
params = {
    'username':'admin',
    'password':'123456'
}
base_url = 'https://www.baidu.com/index.html?'
url = base_url + urlencode(params)
print(url)

运行输出如下:

https://www.baidu.com/index.html?username=admin&password=123456

7、quote

quote 方法可以将 汉字 转化为 URL编码,避免乱码,使用方法如下:

# ************************
# use method of quote
# ************************
from urllib.parse import quote
keyword = '北京'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)

运行输出如下:

https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC

8、unquote

unquote 可以实现对URL的解码,使用方法如下:

# ************************
# use method of unquote
# ************************
from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC'
unqute_url = unquote(url)
print(unqute_url)

运行输出如下:

https://www.baidu.com/s?wd=北京

后续公众号会发布系列教程,更多内容请关注公众号:程序猿学习日记 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值