第十二章:互联网-urllib.parse:分解URL-解码查询参数

12.1.4 解码查询参数
参数在被增加到一个URL之前,需要先编码。

from urllib.parse import urlencode

query_args = {
    'q': 'query string',
    'foo': 'bar',
    }
encoded_args = urlencode(query_args)
print('Encoded:',encoded_args)

编码会替换诸如空格之类的特殊字符,以确保采用一种符合标准的格式将它们传递到服务器。
运行结果:
在这里插入图片描述
如果要利用查询串中的变量传递一个值序列,那么需要在调用urlencode()时将doseq设置为True。

from urllib.parse import urlencode

query_args = {
    'foo': ['foo1','foo2'],
    }
print('Single  :',urlencode(query_args))
print('Sequence:',urlencode(query_args,doseq=True))

结果是一个查询串,包含与同一个名关联的多个值。
运行结果:
在这里插入图片描述
要解码这个查询串,可以使用parse_qs()或parse_qsl()。

from urllib.parse import parse_qs,parse_qsl

encode = 'foo=foo1&foo=foo2'
print('parse_qs :',parse_qs(encode))
print('parse_qsl:',parse_qsl(encode))

parse_qs()的返回值是一个将名映射到值的字典,而parse_qsl()返回一个元组列表,每个元组包含一个名和一个值。
运行结果:
在这里插入图片描述
查询参数中可能由一些特殊字符,会导致服务器端在解析URL时出问题,所以在传递到urlencode()时要对这些特殊字符“加引号”。要在本地对它们加引号以建立这些串的安全版本,可以直接使用quote()或quote_plus()函数。

from urllib.parse import quote,quote_plus,urlencode

url = 'http://localhost:8080/~hellmann/'
print('urlencode() :',urlencode({'url':url}))
print('quote()     :',quote(url))
print('quote_plus():',quote_plus(url))

quote_plus()中的加引号实现会更大程度地替换字符。
运行结果:
在这里插入图片描述
要完成加引号操作的逆过程,可以在适当的时候使用unquote()或unquote_plus()。

from urllib.parse import unquote,unquote_plus

print(unquote('http%3A//localhost%3A8080/~hellmann/'))
print(unquote_plus('http%3A%2F%2Flocalhost%3A8080%2F~hellmann%2F'))

编码的值会转换回一个普通的URL串。
运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值