Python 中的 URL 解析与构建:urllib.parse 模块详解

前言

最近测试一个需求,入职需要进行音乐基础考试需求,简单说就是通过播放的音频回答填空区是什么音符,当然音频、答案等都是上传到oss的,上传oss后,自动拼一个url然后入库。本以为很顺利,可是到小程序访问的时候,访问不到,仔细排查,才知道是由于链接中包含中文导致的。有上千条数据,如何修改数据呢?这就体现出了python的强大快捷,urllib.parse 轻松帮你搞定。

urllib.parse

当涉及到 Python 中的 URL 解析和操作时,urllib.parse 模块提供了丰富的功能。可以使用这个模块来解析 URL、构建查询字符串、编码和解码 URL 等。

URL 解析

使用 urlparse 函数可以将 URL 字符串解析为各个组成部分,比如 scheme、netloc、path、params、query 和 fragment。以下是一个简单的示例:

python 复制代码
from urllib.parse import urlparse
​
url = "https://www.example.com/path?query=123"
parsed_url = urlparse(url)
​
print(parsed_url.scheme)  # https
print(parsed_url.netloc)  # www.example.com
print(parsed_url.path)    # /path
print(parsed_url.query)   # query=123

从输出结果,可以看出来scheme代表协议、netloc代表域名、path代表路径、query代表参数

构建 URL

使用 urlunparse 函数可以将 URL 的各个部分组合成完整的 URL 字符串。以下是一个简单的示例:

ini 复制代码
from urllib.parse import urlunparse
​
parts = ('https', 'www.example.com', '/path', '', 'query=123', '')
full_url = urlunparse(parts)
​
print(full_url)  # https://www.example.com/path?query=123

从输出结果可以看到,urlunparse可以组合出一个完整的url。

编码和解码

使用 quoteunquote 函数可以对 URL 进行编码和解码操作。这在处理 URL 中的特殊字符或非 ASCII 字符时非常有用。示例:

ini 复制代码
from urllib.parse import quote, unquote
​
original_string = "hello world, this is a test"
encoded_string = quote(original_string)
decoded_string = unquote(encoded_string)
​
print(encoded_string)  # hello%20world%2C%20this%20is%20a%20test
print(decoded_string)  # hello world, this is a test

从输出结果可以看到,quote用来编码字符串,unquote用来解码字符串

实战

知道基础使用后,现在我们处理前言中提到的问题

鉴于url比较简单,并没有参数,只有协议、域名、路径,这就很好解决了,看实现代码

ini 复制代码
def _urlparse(url: str):
    parse_url = urlparse(url)
    path = parse_url.path
    encoded_path = '/'.join(quote(segment) for segment in path.split('/'))
​
    new_url = f"{parse_url.scheme}://{parse_url.netloc}{encoded_path}"
    return new_url

使用 urlparse 函数解析原始 URL,然后提取出路径部分进行处理。对路径部分中的每个段落进行 URL 编码,并将它们拼接在一起,最后生成新的 URL,当然构建URL也可以使用上文提到的urlunparse函数,笔者这里使用了字符串拼接方法。最终脚本只需要增加连接数据库,进行更新操作即可。

最后

不到半小时就完成了脚本编写,并修改了所有数据,这也许就是python的便捷之处吧。当然,文中提到的只是 urllib.parse 模块中的一些常用函数,如果你遇到与笔者相同的问题,这些函数基本够用了,想要更加深入了解,推荐去看官方文档,更多功能可以根据自身场景需要进行探索和使用。

欢迎评论区留下你使用urllib.parse处理过的印象深刻的问题!

相关推荐
蒙娜丽宁5 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev6 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子20 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python24 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯34 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜1 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼1 小时前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
假装我不帅1 小时前
asp.net framework从webform开始创建mvc项目
后端·asp.net·mvc