urllib.parse.urlencode 的使用详解

89 阅读2分钟

——让你轻松处理 URL 参数的利器

在编写 Python 网络程序时,我们经常需要和 Web 接口打交道。接口通常要求我们通过 URL 的 查询字符串(Query String) 传递参数,比如登录接口:

https://example.com/login?name=admin&password=123456&code=8V74

要将这样的参数组装成字符串手动拼接不仅麻烦还容易出错。幸好,Python 的 urllib.parse 模块为我们提供了非常方便的工具:urlencode()


一、示例代码解析

我们先来看一段代码示例:

import urllib.parse

dict = {"name": "admin", "password": "123456", "code": "8V74"}

result = urllib.parse.urlencode(dict)

print(result)

输出结果为:

name=admin&password=123456&code=8V74

这就是一个标准的 URL 查询字符串格式。


二、什么是 urlencode?

urllib.parse.urlencode() 是一个函数,作用是将字典对象编码为 URL 查询字符串格式,用于拼接到 GET 请求的 URL 后。

✅ 适用场景:

  • 拼接 GET 请求参数
  • 构造 Web 表单数据
  • 与服务器交互前预处理参数

三、原理与语法说明

1. 函数定义:

urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)

最常用的就是第一个参数 query,它可以是:

  • 字典(dict)
  • 元组列表(例如:[('name', 'admin'), ('code', '8V74')]

2. 参数解释:

参数含义
query要编码的参数,通常是 dict 或 (key, value) 元组列表
doseq如果值是列表,是否展开多个键值对
encoding编码格式,默认 utf-8
quote_via编码时使用的方式,默认 quote_plus(空格变 +

四、进阶用法举例

1. 参数值含中文怎么办?

import urllib.parse

params = {"name": "管理员", "city": "北京"}
query_str = urllib.parse.urlencode(params)

print(query_str)

输出:

name=%E7%AE%A1%E7%90%86%E5%91%98&city=%E5%8C%97%E4%BA%AC

✔ 编码后的字符串可以安全传输,不会出乱码!


2. 如果一个参数有多个值?

比如:tags=python&tags=crawler

params = {"tags": ["python", "crawler"]}
query_str = urllib.parse.urlencode(params, doseq=True)

print(query_str)

输出:

tags=python&tags=crawler

✔ 使用 doseq=True 自动展开多个同名键!


五、与 requests 联动使用

你可以将 urlencode()requests 联用:

import requests
import urllib.parse

params = {"name": "admin", "password": "123456", "code": "8V74"}
query_string = urllib.parse.urlencode(params)

url = f"https://example.com/login?{query_string}"
response = requests.get(url)

print(response.status_code)

✔ 构造 GET 请求变得轻而易举!


六、总结

优点说明
✅ 简洁将字典快速转换为 URL 查询字符串
✅ 安全自动进行 URL 编码(避免中文或特殊符号出错)
✅ 通用可用于 GET 请求、网页参数拼接、接口调用等多种场景

七、小结一句话

当你在写网络请求时,不想手动拼接 "key=value" 的字符串,就用 urllib.parse.urlencode() 吧,它会让你的代码更优雅、更安全、更专业。


如果你觉得这篇文章有帮助,欢迎点赞、关注、转发,让更多人掌握 Python 网络编程的小技巧!

如需进一步了解 urllib 系列模块的内容,比如 urlopen()urlparse() 等,也可以留言告诉我,我们下期详细讲解!