python模块yarl,强大的url处理工具

爬虫工具推荐:
补环境工具推荐:爬虫补环境利器webEnv
web端JavaScript环境检测:SpiderTools谷歌插件

一、介绍

在Python开发中,处理URL往往是一项繁琐的任务。为了简化这一过程,许多开发者选择使用 yarl 库。与Python自带的 urllib 相比,yarl 提供了更加简洁直观的接口和更强大的功能,能够轻松应对复杂的URL操作需求。无论是解析、构建还是修改URL,yarl 都能让开发者以更高效的方式完成任务。
官网:https://yarl.aio-libs.org/en/latest/

二、安装

pip install yarl

三、基本使用

from yarl import URL

url_info = URL('http://example.com/path/to/?arg1=a&arg2=b#fragment')

print(url_info.scheme)    # 输出 URL 的协议部分(如 http, https)
print(url_info.host)      # 输出 URL 的主机名(如 example.com)
print(url_info.port)      # 输出 URL 的端口号(如 80, 443,未指定时返回 None)
print(url_info.path)      # 输出 URL 的路径部分(如 /path/to/)
print(url_info.query)     # 输出 URL 的查询字符串部分(如 arg1=a&arg2=b)
print(url_info.fragment)  # 输出 URL 的片段部分(如 fragment)

四、URL对象属性

1.url_info.scheme:绝对 URL 的协议部分,相对 URL 或以 // 开头的 URL 则为空字符串。
2.url_info.user:URL 中解码后的用户部分,如果用户不存在则为 None。
3.url_info.raw_user:URL 中编码后的用户部分,如果用户不存在则为 None。
4.url_info.password:URL 中解码后的密码部分,如果用户不存在则为 None。
5.url_info.raw_password:URL 中编码后的密码部分,如果用户不存在则为 None。
6.url_info.host:URL 中编码后的主机部分,相对 URL 则为 None。IPv6 的方括号会被去除,主机名会转换为小写,地址会被验证并转换为压缩格式。
7.url_info.raw_host:URL 中 IDNA 解码后的主机部分,相对 URL 则为 None。
8.url_info.host_subcomponent:RFC 3986 第 3.2.2 节定义的主机子组件部分,相对 URL 则为 None。
9.url_info.host_port_subcomponent:RFC 3986 第 3.2.2 节定义的主机和第 3.2.3 节定义的端口子组件部分,相对 URL 则为 None。主机的尾部点会被去除以确保该值可用于 HTTP Host 头。如果端口是协议的默认端口,则省略端口。
10.url_info.port:URL 的端口部分,基于协议的默认端口回退。相对 URL 或没有显式端口且协议没有默认端口替换的 URL 则为 None。
11.url_info.explicit_port:URL 的显式端口部分,不基于协议的默认端口回退。相对 URL 或没有显式端口的 URL 则为 None。
12.url_info.authority:解码后的 URL 授权部分,包括用户、密码、主机和端口的组合。如果所有部分都缺失则为空字符串。
13.url_info.raw_authority:编码后的 URL 授权部分,包括用户、密码、主机和端口的组合。如果所有部分都缺失则为空字符串。
14.url_info.path:解码后的 URL 路径部分,绝对 URL 没有路径部分时为 /。
15.url_info.path_safe:类似于 path,但不解码 %2F 或 %25。这允许区分路径分隔符(/)和编码的斜杠(%2F)。
16.url_info.path_qs:解码后的 URL 路径部分和查询字符串,绝对 URL 没有路径部分时为 /。
17.url_info.raw_path_qs:编码后的 URL 路径部分和查询字符串,绝对 URL 没有路径部分时为 /。
18.url_info.raw_path:编码后的 URL 路径部分,绝对 URL 没有路径部分时为 /。
19.url_info.query_string:解码后的 URL 查询部分,如果查询缺失则为空字符串。
20.url_info.raw_query_string:编码后的 URL 查询部分,如果查询缺失则为空字符串。
21.url_info.fragment:编码后的 URL 片段部分,如果片段缺失则为空字符串。
22.url_info.raw_fragment:解码后的 URL 片段部分,如果片段缺失则为空字符串。
23.url_info.parts:包含解码后路径部分的元组,绝对 URL 没有路径部分时为 (‘/’,)。
24.url_info.raw_parts:包含编码后路径部分的元组,绝对 URL 没有路径部分时为 (‘/’,)。
25.url_info.name:parts 的最后一部分。
26.url_info.raw_name:raw_parts 的最后一部分。
27.url_info.suffix:name 的文件扩展名。
28.url_info.raw_suffix:raw_name 的文件扩展名。
29.url_info.suffixes:name 的文件扩展名列表。
30.url_info.raw_suffixes:raw_name 的文件扩展名列表。
31.url_info.query:表示解码后查询参数的 multidict.MultiDictProxy 对象。如果 URL 没有查询部分则为空值。
32.url_info.absolute:用于检查 URL 是否为绝对 URL
33.url_info.parent:返回一个新的 URL,删除路径的最后一部分,并清理查询和片段部分。

五、URL对象方法

1.url_info.build(scheme,authority,user…):通过指定 URL 的各个组件(如协议、授权部分、用户、密码、主机、端口、路径、查询、片段等)来构建一个新的 URL。如果 encoded=True,则传入的组件不会被自动编码。
scheme:URL 的协议部分(如 http 或 https)。
authority:URL 的授权部分,包括用户、密码、主机和端口。
user:URL 的用户部分。
password:URL 的密码部分。
host:URL 的主机部分。
port:URL 的端口部分。
path:URL 的路径部分。
query:URL 的查询部分,可以是字典、字符串或键值对列表。
query_string:URL 的查询字符串部分。
fragment:URL 的片段部分。
encoded:如果为 True,则传入的组件不会被自动编码。
2.url_info.with_scheme(scheme):返回一个新的 URL,替换协议部分。返回的 URL 可能会有不同的端口(默认端口替换)。
3.url_info.with_user(user):返回一个新的 URL,替换用户部分,如果需要会自动编码用户。如果 user 为 None,则清除用户和密码。
4.url_info.with_password(password):返回一个新的 URL,替换密码部分,如果需要会自动编码密码。如果 password 为 None,则清除密码。
5.url_info.with_host(host):返回一个新的 URL,替换主机部分,如果需要会自动编码主机。相对 URL 不允许更改主机,请使用 URL.join()。
6.url_info.with_port(port):返回一个新的 URL,替换端口部分。如果 port 为 None,则清除端口为默认值。
7.url_info.with_path(path, keep_query=False, keep_fragment=False):返回一个新的 URL,替换路径部分,如果需要会自动编码路径。如果 keep_query=True 或 keep_fragment=True,则保留现有的查询或片段。
8.url_info.with_query(query):返回一个新的 URL,替换查询部分,如果需要会自动编码查询。如果 query 为 None,则清除查询。
9.url_info.extend_query(query):返回一个新的 URL,扩展查询部分。与 update_query() 不同,此方法保留重复的键。
10.url_info.update_query(query):返回一个新的 URL,更新查询部分。与 with_query() 不同,此方法不会完全替换查询。
11.url_info.without_query_params(*query_params):返回一个新的 URL,删除指定的查询参数。如果指定的查询参数不存在,则不执行任何操作。
12.url_info.with_fragment(fragment):返回一个新的 URL,替换片段部分,如果需要会自动编码片段。如果 fragment 为 None,则清除片段。
13.url_info.with_name(name, keep_query=False, keep_fragment=False):返回一个新的 URL,替换路径的最后一部分(名称),并清理查询和片段部分。如果需要会自动编码名称。如果 keep_query=True 或 keep_fragment=True,则保留现有的查询或片段。
14.url_info.with_suffix(suffix, keep_query=False, keep_fragment=False):返回一个新的 URL,替换路径最后一部分的文件扩展名,并清理查询和片段部分。如果需要会自动编码扩展名。如果 keep_query=True 或 keep_fragment=True,则保留现有的查询或片段。
15.url_info.origin():返回一个新的 URL,仅包含协议、主机和端口部分。用户、密码、路径、查询和片段部分被移除。
16.url_info.relative():返回一个新的相对 URL,仅包含路径、查询和片段部分。协议、用户、密码、主机和端口部分被移除。
17.url_info.joinpath(*other, encoded=False):通过将其他元素附加到路径来构造一个新的 URL,并清理查询和片段部分。如果 encoded=True,则不会自动编码路径元素,调用者需确保 URL 的正确性。
18.url_info.join(url):通过将另一个 URL 与当前 URL 结合来构造一个完整的(“绝对”)URL。如果 url 是绝对 URL,则结果中会包含 url 的主机名和/或协议。
19.url_info.human_repr():返回 URL 的解码后的字符串它会将 URL 中的编码部分(如 %20)转换为可读的字符(如空格),使得 URL 更易于理解。
20.url_info.is_default_port():如果 URL 的端口是当前协议的默认端口,则返回 True,否则返回 False。相对 URL 没有默认端口。
六、yarl方法
1.yarl.cache_clear():清除 IDNA 和主机编码缓存。
2.yarl.cache_info():返回一个包含 “idna_encode”、“idna_decode” 和 “encode_host” 键的字典,每个值指向相应的 CacheInfo 结构(详细信息见 functools.lru_cache())。
3.yarl.cache_configure(idna_encode_size=256, idna_decode_size=256, encode_host_size=512):设置 IDNA 编码、IDNA 解码和主机编码缓存的大小。传入 None 可以使相应的缓存无限制(可能会稍微加快主机编码操作,但内存占用可能非常高,请谨慎使用)

七、修改URL

from yarl import URL

url_info = URL('http://example.com/path/to/?arg1=a&arg2=b#fragment')
new_url_info = url_info.build(scheme='https', host='build_example.com')
print('build修改后的值', new_url_info)

print(url_info.with_scheme('https'))
print(url_info.with_host('with_host_example.com'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

局外人LZ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值