2017-07-13 55 views
1

我需要幫助如何在使用python請求get時從url中拆分參數。如何拆分Python請求獲取參數?

假設我有這個網址

https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D 

,我通過

_get = requests.get("https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D", headers={"Authorization":"MyToken 1234abcd"}) 

_get.url檢查做requests.get並返回

u'https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D' 

然後我嘗試用下面的拆分參數

url = "https://blabla.io/bla1/blas/blaall/messages" 
query = {"data[]":[{"limit_count":100, "limit_size":100}]} 
headers = {"Authorization":"MyToken 1234abcd"} 
_get = requests.get(url, params=query, headers=headers) 

_get.url返回以下結果

u'https://blabla.io/bla1/blas/blaall/messages?data%5B%5D=limit_count&data%5B%5D=limit_size' 

沒有10010000

在這種URL的 - >https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D,究竟如何拆分它的參數?

謝謝你的幫助。

+0

[url查詢參數爲dict python]可能重複(https://stackoverflow.com/questions/21584545/url-query-parameters-to-dict-python) – Arun

+0

謝謝,這是一個很好的參考,但我更喜歡使用'requests'庫 – Ling

回答

1

所以,你正在尋找:

data={"limit_count":100,"limit_size":1000} 

爲您的查詢參數。

不幸的是,requests不會扁平化該嵌套結構,它會將任何Iterable值視爲該鍵的多個值,例如,你的窩字典是像對待:

query = {'data': ['limit_count', 'limit_size']} 

這就是爲什麼你沒有看到1001000最終結果。

您需要將其拼合成一個字符串。您可以使用json.dumps()創建所需的字符串(雙引號與單引號,緊湊型)。然後requests會做必要的URL編碼,例如:

In []: 
data = {'limit_count': 100, 'limit_size': 1000} 
query = {'data': json.dumps(data, separators=(',', ':'))} 
request.get('http://httpbin.org', params=query).url 

Out[]: 
'http://httpbin.org/?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D' 
0
from urllib.parse import urlsplit, parse_qs 
import requests 
url = "https://blabla.io/bla1/blas/blaall/messages?data=%7B%22limit_count%22%3A100%2C%22limit_size%22%3A1000%7D" 
query = urlsplit(url).query 
params = parse_qs(query) 
headers = {"Authorization":"MyToken 1234abcd"} 
_get = requests.get(url, params=params, headers=headers) 
0

據我所知,你不能使用requests庫來解析的網址。

您使用它來處理請求。如果你想要一個URL解析器,請改爲使用urllib.parse