目录
使用urllib.parse.urljoin()方法拼接URL
使用urllib.parse.urlencode()方法拼接查询参数
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,欢迎关注公众号:CTO Plus
在Python中,我们经常需要对URL地址进行拼接操作,以便访问特定的资源。URL地址由多个部分组成,包括协议、主机名、端口号、路径、查询参数和锚点等。其中Python的标准库urllib.parse提供了处理URL的功能,包括解析、构建和分割URL等操作。下面我们将逐一介绍urllib.parse模块中常用的方法,介绍如何使用Python对URL地址进行拼接。
使用urllib.parse.urljoin()方法拼接URL
在Python中,可以使用urllib.parse模块中的urljoin()方法来拼接URL地址。urljoin()方法会将一个基础URL和一个相对URL拼接成一个完整的URL。如果相对URL是一个绝对路径,则会覆盖基础URL中的路径部分;否则,会将相对URL添加到基础URL的路径部分后面。
使用方法:urljoin(base, url, allow_fragments=True)
该方法用于将相对URL转换为绝对URL。base参数指定URL的基础路径(即绝对路径),url参数指定URL的相对路径。allow_fragments参数默认为True,表示允许URL中包含fragment(即锚点)信息。返回值为拼接后的绝对URL。
下面是一个示例代码:
from inner_module_def_datastruct import WEIXIN_URL, CSDN_URL, GIT_URL
from urllib.parse import urljoin, urlparse, urlencode, urlsplit, urldefrag, urlunparse, urlunsplit
# 基础URL
base_url = "https://mp.weixin.qq.com"
# 相对URL
relative_url = "/s/0yqGBPbOI6QxHqK17WxU8Q"
# 拼接URL
full_url = urljoin(base_url, relative_url)
print(full_url)
print(WEIXIN_URL)
输出结果为:
https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q
https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q
在上面的代码中,首先定义了一个基础URL和一个相对URL,然后使用urljoin()方法将它们拼接成一个完整的URL。最后,使用print()函数输出拼接后的URL。
使用urllib.parse.urlencode()方法拼接查询参数
在Python中,可以使用urllib.parse模块中的urlencode()方法来拼接查询参数。urlencode()方法会将一个字典类型的参数转换成查询字符串的形式,然后添加到URL地址的末尾。查询字符串的格式为key1=value1&key2=value2&...。
使用方法:urlencode(query, doseq=False)
该方法用于将字典、元组列表等数据结构转换为查询字符串。query参数表示要转换的数据。如果doseq为True,则将多个值的查询字符串合并到一个参数中,否则每个值都分别转换为独立的参数。
下面是一个示例代码:
from urllib.parse import urlencode
# 查询参数
params = {'id': 1, 'name': 'steverocket', 'age': 25}
# 拼接查询参数
query_string = urlencode(params)
print(query_string) # id=1&name=steverocket&age=25
# 拼接URL
full_url = full_url+"?"+query_string
print(full_url) # https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q?id=1&name=steverocket&age=25
在上面的代码中,首先定义了一个基础URL和一个字典类型的查询参数params。然后使用urlencode()方法将查询参数转换成查询字符串的形式,并将其添加到URL地址的末尾。最后,使用print()函数输出拼接后的URL。
urlparse()
语法:urlparse(url, scheme='', allow_fragments=True)
该方法用于解析URL,并将其分解为6个部分:scheme、netloc、path、params、query和fragment。scheme表示URL协议,netloc表示URL主机和端口,path表示URL路径,params表示URL参数,query表示URL查询字符串,fragment表示URL中的锚点。
示例:
from urllib.parse import urlparse
url = 'http://www.example.com/path/page.html?query=abc#header'
parsed = urlparse(url)
print(parsed.scheme) # http
print(parsed.netloc) # www.example.com
print(parsed.path) # /path/page.html
print(parsed.params) #
print(parsed.query) # query=abc
print(parsed.fragment) # header
urlsplit()
语法:urlsplit(url, scheme='', allow_fragments=True)
该方法与urlparse类似,用于将URL解析为5个部分:scheme、netloc、path、query和fragment。但不同的是,urlsplit不解析params参数,因为此参数很少使用。
示例:
from urllib.parse import urlsplit
url = 'http://www.example.com/path/page.html?query=abc#header'
split = urlsplit(url)
print(split.scheme) # http
print(split.netloc) # www.example.com
print(split.path) # /path/page.html
print(split.query) # query=abc
print(split.fragment) # header
print(split) # SplitResult(scheme='http', netloc='www.example.com', path='/path/page.html', query='query=abc', fragment='header')
urldefrag()
语法:urldefrag(url)
该方法用于从URL中删除fragment(即锚点)信息,并返回其余部分。返回值为元组,包含两个元素:删除fragment后的URL和删除的fragment信息。
示例:
from urllib.parse import urldefrag
url = 'http://www.example.com/path/page.html?query=abc#header'
url_without_fragment, fragment = urldefrag(url)
print(url_without_fragment) # http://www.example.com/path/page.html?query=abc
print(fragment) # header
urlunparse()
语法:urlunparse(components)
该方法与urlparse相反,用于将6个URL部分拼接为一个完整URL。components参数为包含6个URL部分的元组,顺序与组成的URL顺序一致。
示例:
from urllib.parse import urlunparse
url_parts = ('http', 'www.example.com', '/path/page.html', '', 'query=abc', 'header')
full_url = urlunparse(url_parts)
print(full_url) # http://www.example.com/path/page.html?query=abc#header
urlunsplit()
语法:urlunsplit(components)
该方法与urlunparse类似,但只包含5个URL部分,不包含params参数。
示例:
from urllib.parse import urlunsplit
url_parts = ('http', 'www.example.com', '/path/page.html', 'query=abc', 'header')
full_url = urlunsplit(url_parts)
print(full_url) # http://www.example.com/path/page.html?query=abc#header
手写URL请求地址的拼接代码
也可以不使用标准库提供的方法自己组装URL的查询参数,代码示例如下:
URL = "http://127.0.0.1/version"
dicts = {'platform': 'windows_64bit', 'object': 'agent', 'version': '20160216'}
os_type = {"os_type": "win_xp"}
def parse_url(data:dict):
item = data.items()
urls = "?"
for i in item:
(key, value) = i
temp_str = key + "=" + value
urls = urls + temp_str + "&"
urls = urls[:len(urls) - 1]
return urls
print(URL + parse_url(dicts))
print(URL + parse_url(os_type))
# 输出结果:
# http://127.0.0.1/version?platform=windows_64bit&object=agent&version=20160216
# http://127.0.0.1/version?os_type=win_xp
总结
本文介绍了如何使用Python对URL地址进行拼接。具体实现方法是,使用urllib.parse模块中的urljoin()方法拼接URL地址,使用urlencode()方法拼接查询参数。通过这种方式,可以方便地拼接URL地址,访问特定的资源。
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接