2012-08-25 74 views
0

我已經將URL存儲在應該傳遞給urllib2的列表中。然而,urllib似乎不太喜歡這一點,我只是不明白爲什麼!爲什麼urllib2不接我的網址?

這裏是我有:

url = list[1] 
response = urllib2.urlopen(url) 
html = response.read() 

的網址是什麼樣的谷歌地圖路線的Web API網址:

http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false 

現在,如果我嘗試運行此,檢索html總是看起來像這樣:

{ 
"routes" : [], 
"status" : "INVALID_REQUEST" 
} 

指示傳遞的URL有問題。但是,如果我走的URL,並直接分配給它,就像這樣:

url = "http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false" 
response = urllib2.urlopen(url) 
html = response.read() 

結果會很樂意與(對我來說)必不可少的端部看起來像這樣來通過:

  "warnings" : [], 
     "waypoint_order" : [ 2, 0, 7, 5, 6, 4, 3, 1 ] 
     } 
    ], 
    "status" : "OK" 
} 

我(希望不要太愚蠢)的問題是:爲什麼urllib在URL直接分配時執行其工作,但如果它來自列表則不行?

非常感謝您的幫助, Ĵ

PS:有一個原因論壇軟件總是切斷我的「大家好」的問候?

+0

我建議名單[1]是不一樣的你的字符串。另外,我建議你不要命名數組「列表」,因爲它是一個類型。 – moopet

+0

乾杯moopet, 在我的代碼列表[1]實際上並沒有被稱爲,我只是需要匿名一點;) 關於列表[1]不等於我的網址:這怎麼可能,因爲我用'print list [1]'讓Python打印相應的字符串,然後將它複製到原來的位置......? – JoW

+0

回覆:「ps」 - 人們可能會編輯它,因爲問候和謝謝你不需要在這裏。只是問題。 – jdi

回答

0

我終於解決了這個問題!

是很容易,一旦我往後退了一下,又想起了它: 我沒有得到從谷歌的Web API的答案,這意味着urllib2的確實通過東西。但是,它一定是發送了一些對API後端沒有意義的東西。包含德語地址的URL我很幸運 - 猜測這個問題是由元音變音引起的。

所以我只是通過一個函數替換每個元音變音的非變音替代方法,突然間一切似乎工作正常。

如果有人來翻過一個類似的問題,這裏是我如何解決它:

# Function for replacing all umlauts 
def replaceUmlauts(text): 
    dic = {'Ä':'Ae', 'ä':'ae', 'Ö':'Oe', 'ö':'oe', 'Ü':'Ue', 'ü':'ue', 'ß':'ss'} 
    for i, j in dic.iteritems(): 
     text = text.replace(i, j) 
    return text 

然後只需使用

response = urllib2.urlopen(replaceUmlauts(url)) 
相關問題