python querystring怎么用?python解析url查询参数

在 Python 中处理 Query String(查询字符串)通常涉及从 URL 中提取参数,或者将字典转换为查询字符串,以下是几种常见的方法:

从 URL 中提取查询参数

使用 urllib.parse(推荐)

from urllib.parse import urlparse, parse_qs, parse_qsl
url = "https://example.com/search?name=John&age=30&city=Beijing&city=Shanghai"
# 解析 URL
parsed_url = urlparse(url)
query_string = parsed_url.query
# 方法 1: parse_qs - 返回字典,值为列表(因为一个键可能有多个值)
params = parse_qs(query_string)
print(params)
# {'name': ['John'], 'age': ['30'], 'city': ['Beijing', 'Shanghai']}
# 方法 2: parse_qsl - 返回键值对列表
params_list = parse_qsl(query_string)
print(params_list)
# [('name', 'John'), ('age', '30'), ('city', 'Beijing'), ('city', 'Shanghai')]
# 获取单个值
name = params['name'][0]  # 'John'
age = params.get('age', [''])[0]  # '30'

使用 requests 库(处理请求参数)

import requests
# 发送请求时自动处理查询字符串
response = requests.get("https://api.example.com/users", params={"name": "John", "age": 30})
print(response.url)
# https://api.example.com/users?name=John&age=30

将字典转换为查询字符串

使用 urllib.parse.urlencode

from urllib.parse import urlencode
params = {
    "name": "John",
    "age": 30,
    "city": "Beijing"
}
query_string = urlencode(params)
print(query_string)
# name=John&age=30&city=Beijing
# 如果需要包含在 URL 中
from urllib.parse import urlunparse, urlparse
base_url = "https://example.com/search"
parsed = urlparse(base_url)
new_url = parsed._replace(query=query_string).geturl()
print(new_url)
# https://example.com/search?name=John&age=30&city=Beijing

使用 requests 库

import requests
params = {"name": "John", "age": 30}
response = requests.get("https://api.example.com/users", params=params)
print(response.url)
# https://api.example.com/users?name=John&age=30

在 Web 框架中使用

Flask

from flask import Flask, request
app = Flask(__name__)
@app.route('/search')
def search():
    # 获取查询参数
    name = request.args.get('name')
    age = request.args.get('age', type=int)  # 自动转换为整数
    # 获取所有查询参数
    all_params = request.args.to_dict()
    return f"Name: {name}, Age: {age}"

Django

from django.http import HttpResponse
def search_view(request):
    # 获取查询参数
    name = request.GET.get('name')
    age = request.GET.get('age', type=int)
    # 获取所有查询参数
    all_params = request.GET
    return HttpResponse(f"Name: {name}, Age: {age}")

常见注意事项

处理特殊字符

from urllib.parse import quote, unquote
# URL 编码
encoded = quote("Hello World")
print(encoded)  # Hello%20World
# URL 解码
decoded = unquote("Hello%20World")
print(decoded)  # Hello World

处理多个同名参数

from urllib.parse import parse_qs
url = "https://example.com/search?tag=python&tag=javascript&tag=web"
params = parse_qs(url.split('?')[1])
print(params)
# {'tag': ['python', 'javascript', 'web']}
# 获取所有值
tags = params['tag']
print(tags)  # ['python', 'javascript', 'web']
# 获取第一个值
first_tag = params['tag'][0]
print(first_tag)  # 'python'
场景 推荐方法
解析 URL 查询参数 urllib.parse.parse_qs()
构建查询字符串 urllib.parse.urlencode()
发送 HTTP 请求 requests.get(url, params=dict)
Web 框架中获取参数 Flask: request.args, Django: request.GET

这些方法涵盖了大多数处理 Query String 的场景,根据你的具体需求选择合适的方法即可。

(URL解析)Python如何实现URL解析?快来学习urllib标准库!
加载中
(URL解析)Python如何实现URL解析?快来学习urllib标准库!

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/483673.html

赞 (0)
上一篇 2026年7月11日 22:45
下一篇 2026年7月11日 22:46

相关推荐

  • 服务器推送最新消息是什么?服务器推送消息怎么实现

    服务器推送技术已成为现代互联网应用实现即时通讯的核心手段,其本质在于变“客户端主动拉取”为“服务端主动推送”,极大地降低了网络延迟与资源消耗,核心结论是:构建高效、稳定的服务器推送机制,必须精准匹配业务场景,在WebSocket长连接、SSE单向流、以及轻量级轮询之间做出最优权衡,并建立完善的断线重连与心跳检测……

    2026年3月7日
    11900
  • 服务器应急预案怎么写?服务器故障应急处理方案

    建立完善的服务器应急预案是保障企业业务连续性与数据安全的核心防线,其本质在于通过标准化的流程将突发故障带来的损失降至最低,一套成熟的应急机制不仅能缩短平均修复时间(MTTR),更能有效规避因系统瘫痪导致的重大经济损失与信誉风险,企业必须摒弃“重建设、轻运维”的思维,将应急响应能力视为IT架构稳健性的关键指标,应……

    2026年3月30日
    11600
  • 服务器已经停止响应怎么办?服务器连接失败解决方法

    当网页无法打开或应用程序无法连接数据时,最直接的技术判定往往是服务器已经停止响应,这一现象意味着客户端发出的请求未能得到服务器的有效反馈,连接在物理或逻辑层面中断,核心结论在于:该故障通常源于服务器过载、网络配置错误、资源耗尽或遭受攻击,解决问题的关键在于快速定位瓶颈并实施分级排查,从网络链路到服务器内核状态进……

    2026年4月11日
    10500
  • 中国的IPv6服务器有哪些公司,哪家好?

    中国IPv6服务器提供商已形成以头部云厂商和持牌IDC服务商为主的市场格局,其中简米科技(2003年始创,23年行业沉淀)和酷番云(工信部一类增值电信全牌照)等专业服务商在IPv6双栈部署上具备显著优势,IPv6服务器市场格局与需求背景近年来,随着《推进IPv6规模部署行动计划》的深入实施,国内IPv6用户规模……

    2026年7月31日
    900
  • 个人域名有什么特点?个人域名注册需要注意什么

    个人域名不仅是网络世界的独立门牌号,更是构建个人品牌资产、实现流量自主可控的核心基础设施,其价值远超普通社交账号,在数字化生存成为常态的2026年,很多人依然混淆“个人域名”与“社交媒体主页”的概念,社交账号是房东提供的临时展位,随时可能因规则变动而消失;而个人域名是你自己买下的土地,上面建的房子归你所有,这种……

    2026年6月7日
    4600
  • 服务器有多大功率,普通服务器一小时耗电多少度?

    服务器功率是数据中心规划、企业IT建设以及运维成本核算中的核心指标,通常情况下,单台服务器的功率跨度极大,从几十瓦的微型服务器到数千瓦的高性能计算节点不等,对于主流的企业级机架式服务器,其典型运行功率主要集中在 300W 至 800W 之间,而随着人工智能和高性能计算需求的爆发,配备多张高算力显卡的AI服务器功……

    2026年2月24日
    16300
  • 个人服务器怎么租才划算?租用云服务器有哪些注意事项

    个人服务器租赁的核心在于根据具体业务场景选择云服务商,通过控制台完成实例创建、系统配置与安全组设置,通常按需或包年包月计费,新手建议从轻量应用服务器起步以降低成本,很多人对“个人服务器”存在误解,以为必须去机房搬砖或购买昂贵的物理主机,随着云计算技术的普及,个人用户只需通过网页控制台,几分钟内就能拥有一台属于自……

    2026年5月29日
    4400
  • LOL各大服务器区都在哪里?,各服务器区对应地区有哪些?

    LOL国服服务器分为电信、网通、移动三大网络以及部分全网络大区,具体选择需根据玩家所在地区网络运营商,例如艾欧尼亚(电信一区)适合南方电信用户,比尔吉沃特(网通一区)适合北方联通用户,LOL国服服务器区域划分概览英雄联盟国服由腾讯运营,目前共有数十个大区,但根据网络运营商类型和地理位置,可以归纳为几个主要阵营……

    2026年8月6日
    500
  • 服务器开机内存自检后就卡着怎么办?内存自检不过的解决方法

    服务器开机内存自检后就卡着,绝大多数情况并非内存条本身损坏,而是由于BIOS兼容性配置错误、硬件资源冲突或外设干扰导致的初始化中断,核心结论在于:这是系统在“内存训练”或“硬件握手”阶段未能通过校验的典型表现,直接更换内存往往无法解决问题,必须通过最小系统法排查与固件层面的深度调优才能彻底解决,故障本质:为何卡……

    2026年3月27日
    9900
  • 该网站屏蔽插件怎么办?如何安全使用浏览器插件

    该网站已屏蔽以下插件,通常是因为浏览器安全策略、网站反爬机制或插件本身存在恶意行为,建议优先检查插件权限并尝试无痕模式排查,当你满怀期待地打开一个心仪已久的网站,准备使用某个辅助工具时,屏幕上却冷冰冰地弹出一行字:“该网站已屏蔽以下插件”,这种体验确实令人沮丧,仿佛被一道无形的墙挡在了门外,这并非针对你个人的恶……

    2026年7月4日
    12900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注