2012-08-25 47 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)) 
相关问题