hyperlink,python超好用的url解析模块

URL与每一个使用网络的人密切相关,尤其对于web开发人员,它被设计为供人类和计算机使用,双重目的产生了两种规范的表示形式:URI和IRI

  1. URI,完全编码,仅支持ASCII,适合网络传输
  2. IRI,完全编码,支持unicode, 适合显示

举一个简单的例子,下面两个url完全是等价的

http://127.0.0.1/?name=小明
http://127.0.0.1/?name=%E5%B0%8F%E6%98%8E

第一个url适合人类理解,第二个url适合计算机理解和使用,第一个url经过url编码所得到的正是第二个url,对于url解析和编码,python提供了标准库,但用过的人都知道,使用起来并不是那么方便。

hyperlink,在url解析和构造方面提供了非常优秀的体验,简直不要太人性化。

1. url编码转换

from hyperlink import URL

url = "http://127.0.0.1/?name=小明"
url = URL.from_text(url)
print(url.to_uri().to_text())

url = 'http://127.0.0.1/?name=%E5%B0%8F%E6%98%8E'
url = URL.from_text(url)
print(url.to_iri().to_text())

RUI和IRI两种规范的url之间,可以自由转换

2. url解析

from hyperlink import URL

url = "http://127.0.0.1/?name=小明#nose"
url = URL.from_text(url)
print(url.scheme)   # 协议
print(url.host)     # 主机
print(url.port)     # 端口
print(url.path)     # path
print(url.query)    # 请求参数
print(url.get('name'))
print(url.fragment) # 片段

3. 构造新的url

from hyperlink import URL

url = "http://127.0.0.1/"
url = URL.from_text(url)
print(url.click('login').to_text())     # http://127.0.0.1/login
print(url.replace(scheme='https').to_text())        # https://127.0.0.1:80/
print(url.replace(query={'name': '小明'}))    # http://127.0.0.1/?name=小明

click可以将一段新的path拼接到原有的url上,replace可以替换url的任意一个组成部分。

虽然hyperlink提供的功能都非常简单,但是却很实用,相比于python提供的标准库,更加pythonic。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案