Python实战:python URL请求地址的拼接,标准库urllib.parse详解

目录

使用urllib.parse.urljoin()方法拼接URL

使用urllib.parse.urlencode()方法拼接查询参数

urlparse()

urlsplit()

urldefrag()

urlunparse()

urlunsplit()

手写URL请求地址的拼接代码

总结


注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,欢迎关注公众号:CTO Plus

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

 

在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地址,访问特定的资源。

SteveRocket的博客_CSDN博客-Django进阶,Python进阶,网络&信息安全领域博主SteveRocket擅长Django进阶,Python进阶,网络&信息安全,等方面的知识https://blog.csdn.net/zhouruifu2015/


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接



关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SteveRocket

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

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

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

打赏作者

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

抵扣说明:

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

余额充值