将字符串转换为python中GET请求的参数

时间:2019-01-22 06:55:06

标签: python-3.x string url python-requests

我正在调用GET API来检索一些数据。要拨打电话,我需要将关键字隐蔽为

keyword = "mahinder singh dhoni"

进入

caption%3Amahinder%2Ccaption%3Asingh%2Ccaption%3Adhoni

我是python新手,不了解pythonic方式。我就是这样

caption_heading = "caption%3A"
caption_tail = "%2Ccaption%3A"

keyword = "mahinder singh dhoni"
x = keyword.split(" ")
new_caption_keyword = []
new_caption_keyword.append(caption_heading)
for data in x:
    new_caption_keyword.append(data)
    new_caption_keyword.append(caption_tail)

search_query = ''.join(new_caption_keyword)
search_query = search_query[:-13]

print("new transformed keyword", search_query)

有没有更好的方法可以做到这一点呢?这意味着这是一种硬编码。 谢谢

2 个答案:

答案 0 :(得分:2)

最好将我们的原始字符串转换为列表:

>>> keyword = "mahinder singh dhoni"
>>> keyword.split()
['mahinder', 'singh', 'dhoni']

然后您的实际字符串看起来像caption:...,caption:...,caption:...,可以通过联接和格式来完成:

>>> # if you're < python3.6, use 'caption:{}'.format(part)`
>>> [f'caption:{part}' for part in keyword.split()]
['caption:mahinder', 'caption:singh', 'caption:dhoni']
>>> ','.join([f'caption:{part}' for part in keyword.split()])
'caption:mahinder,caption:singh,caption:dhoni'

最后,您将使用urllib.parse进行urlencode:

>>> import urllib.parse
>>> urllib.parse.quote(','.join([f'caption:{part}' for part in keyword.split()]))
'caption%3Amahinder%2Ccaption%3Asingh%2Ccaption%3Adhoni'

答案 1 :(得分:1)

所以尝试这种方式, 您可以使用"%2Ccaption%3A"代替空白,然后使用"caption%3A"

来代替字符串

对于2.x:

>>> from urllib import quote
>>> keyword = "mahinder singh dhoni"
>>> quote(','.join(['caption:%s'%i for i in keyword.split()]))

对于3.x:

>>> from urllib.parse import quote
>>> keyword = "mahinder singh dhoni"
>>> quote(','.join(['caption:%s'%i for i in keyword.split()]))