urllib.parse解析url

介绍

parse模块是urllib库的一个工具模块,可用于对url解析、编码等操作。

主要方法

方法说明
urlparse对url各部分拆分
urlunparseurlparse的反向操作,将各部分组合为url
urlsplit对url各部分拆分(类似urlparse )
urlunspliturlsplit 的反向操作(类似urlsplit )
urljoin将url基础部分与额外部分进行合并
urlencode将dict对象转为query部分,同时可进行url编码
parse_qsurlencode的反向操作,同时可进行解码,结构为dict
parse_qsl类似parse_qs,但结果为tuple组成的list
quote对字符进行url编码
unquotequote的反向操作

urlparse

urlparse方法将完整的url分解为不同部分,结果类dict对象。

完整的url如下:

url = 'http://www.baidu.com/book/index.html;user?id=5#comment'

由6部分组成:

名称说明
schemehttp协议:通常为http或https
netlocwww.baidu.com域名
path/book/index.html路径:注意第1个字符为/
paramsuser参数:很少会用到该部分
queryid=5查询:键值对,一般作为get请求的参数
commentcomment锚点:#后内容,用于在页面中定位
import urllib.parse
url1 = 'http://www.baidu.com/book/index.html;user?id=5#comment'
result1 = urllib.parse.urlparse(url1)
#解析结果可以用名称获取,也可以用下标获取
print(result1.netloc)
print(result1[3])

#额外参数scheme与allow_fragments
#如果url中不含有协议部分,可额外指定scheme;否则无效。
#allow_fragments=False,表示忽略fragment部分。
#忽略后整个id=a#comment都被分析为query部分。
url2 = 'www.baidu.com/book/index.html;user?id=a#comment'
result2 = urllib.parse.urlparse(url2,scheme="https",allow_fragments=False)

urlunparse

urlunparse将6个部分的值进行合并,结果为完整的url字符串。

data = ["http","www.baidu.com","index.html","user","a=10","comment"]
#必须按顺序设置6个部分的值,该方法不会自动进行url转码
print(urllib.parse.urlunparse(data))

urlsplit

urlsplit相比urlparse,只是不会将param与path分离,保存在path中。
因此,结果有5部分。

url1='http://www.baidu.com/book/index.html;user?id=5#comment'
result1 = urllib.parse.urlsplit(url1)
#path='/book/index.html;user'

urlunsplit

urlunsplit将5个部分的值进行合并

data = ["http","www.baidu.com","index.html;user","a=10","comment"]
print(urllib.parse.urlunsplit(data))

urljoin

url的6个部分分为基础部分(scheme,netloc,path)与附加部分(param,query,fragment)

urljoin可以使用备用的基础参数 确保url的完整性。

urljoin第1个参数包含备用的基础参数,如果第2个参数中缺乏基础参数,则用第1个参数的对应部分代替。
但是,第1个参数中的附加部分不会有任何效果。

urllib.parse.urljoin("http://www.baidu.com/index.html?b=20", "//www.my.com/index2.html?a=10")
#第1个参数只补充了协议部分
#http://www.my.com/index2.html?a=10

urlencode

url各部分在发起请求前都要进行url编码,特殊字符或中文等都会被转为%##的样式。

urlencode将dict类型对象序列化为query部分,符合 a=#&b=# 的格式。同时,可以指定编码。

params={
    "name":"啊啊啊",
    "age":22
}
#参数encoding指定编码
urllib.parse.urlencode(params, encoding="utf-8")

parse_qs

parse_qs用于反向序列化,首先将query部分解码,并转为dict对象。
注意:参数并非完整的url,可先用urlparse 拆分出query部分。

query="a=%E5%95%8A%E5%95%8A%E5%95%8A&b=20"
urllib.parse.parse_qs(query, encoding="utf-8")

parse_qsl

parse_qsl相比parse_qs,只是将结果转为tuple对象的list

urllib.parse.parse_qsl(url2, encoding="utf-8")

quote

quote将字符串进行url编码

keyword = "啊啊啊"
print("http://www.baidu.com/index?wd="+urllib.parse.quote(keyword, encoding="utf-8"))

unquote

unquote是对quote的反向操作,将url编码的字符串解码。
可直接用完整的url作为参数。

url="http://www.baidu.com/index?wd=%E5%95%8A%E5%95%8A%E5%95%8A"
urllib.parse.unquote(url)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值