2013-03-28 54 views
3

我嘗試用口音訪問一個網址,但它沒有工作:Python3與urllib而口音

#!/usr/bin/python3.3 
# -*- coding: utf-8 -*- 

import urllib.request 

response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?city=Lévis&format=json") 
content = response.read() 
print(content) 

當我執行這個代碼,我的回報

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 22: ordinal not in range(128) 

所以有此錯誤我嘗試這個

response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?city=Lévis&format=json".encode("UTF-8")) 

但仍然是一個錯誤

AttributeError: 'bytes' object has no attribute 'timeout' 

你有什麼想法,我的錯誤在哪裏?

+3

網址[不能包含任意的Unicode(http://en.wikipedia.org/wiki/URL#List_of_allowed_URL_characters)。你需要[以某種方式]逃避冒犯的角色(http://docs.python.org/3/library/urllib.parse.html#url-quoting)。 – Cairnarvon 2013-03-28 03:38:31

回答

5

你需要逃避你的查詢參數,如@Cairnarvon說:

import urllib.parse 

city = 'Lévis' 
query = "city=%s&format=json" % (urllib.parse.quote(city),) 
response = urllib.request.urlopen("http://nominatim.openstreetmap.org/search.php?" + query) 
+1

YES = D非常感謝你=) – Jean 2013-03-28 22:14:45