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处理过的印象深刻的问题!

相关推荐
yuuki23323310 分钟前
【C语言】文件操作(附源码与图片)
c语言·后端
IT_陈寒13 分钟前
Python+AI实战:用LangChain构建智能问答系统的5个核心技巧
前端·人工智能·后端
扶尔魔ocy32 分钟前
python程序打包成win的exe应用(以OCR应用为例)
python·ocr·中文识别
无名之辈J37 分钟前
系统崩溃(OOM)
后端
Psycho_MrZhang41 分钟前
自定义层和读写文件
pytorch·python·深度学习
码农刚子1 小时前
ASP.NET Core Blazor简介和快速入门 二(组件基础)
javascript·后端
间彧1 小时前
Java ConcurrentHashMap如何合理指定初始容量
后端
catchadmin1 小时前
PHP8.5 的新 URI 扩展
开发语言·后端·php
少妇的美梦1 小时前
Maven Profile 教程
后端·maven
白衣鸽子1 小时前
RPO 与 RTO:分布式系统容灾的双子星
后端·架构