2014-02-25 19 views
0

我使用Python中的urllib2通過echonest api傳遞幾個參數。一些藝術家和曲目名稱具有&符號(&)。html「&」和參數

例如: 湯米詹姆斯&的Shondells == artist=Tommy%20James%20&20The%20Shondells

我怎樣才能正確地傳遞符號字符通過API參數?

完整的API查詢:

http://developer.echonest.com/api/v4/song/search?api_key=KEY_GOES_HERE&artist=Tommy%20James%20&20The%20Shondells&title=Crimson%20and%20Clover

+0

你現在如何編碼參數?你通常使用'urllib.quote'來處理編碼,並且它會正確地爲你編碼'&'。 –

+0

你是否簡單地嘗試過'%26'? – ConcurrentHashMap

回答

1

你沒有說明你是如何構建您的查詢字符串,但我強烈建議你檢查出,而不是手動編碼任何東西urllib.quote()urllib.quote_plus()urllib.urlencode()功能。後者將適用quote_plus()您在傳遞鍵和值:

>>> from urllib import urlencode 
>>> artist = 'Tommy James & The Shondells' 
>>> api_key = 'KEY_GOES_HERE' 
>>> urlencode({'artist': artist, 'api_key': api_key}) 
'api_key=KEY_GOES_HERE&artist=Tommy+James+%26+The+Shondells' 

現在你artist條目已被使用+的空間和%26的符號編碼。

+0

所有很棒的資源,謝謝。我正在迭代我創建的csv文件,並從每個單元格中提取值。 – Mike

1

之前您在藝術家變量添加到URL,第一次嘗試與它對應的URI編碼, '%26' 取代的 '&' 每次出現。

artist = artist.replace('&', '%26') 
+2

而不是手動替換任何這樣的字符,您應該使用'urllib.quote()'代替。如果名稱中包含'='字符會怎麼樣?或'/'? –

+0

這正是我正在尋找的,不知道.quote()方法。謝謝! – Mike

+0

@Mike:您可能需要查看該庫中的更多功能。例如['urlencode()'函數](http://docs.python.org/2/library/urllib.html#urllib.urlencode),其中的url爲您引用鍵和值。 –