我已经将URL存储在一个列表中,这些URL应该被传递给urllib2。然而,urllib似乎不太喜欢这一点,我就是不明白为什么!
下面是我得到的信息:
url = list[1]
response = urllib2.urlopen(url)
html = response.read()URL是一种google maps Directions Web API URL:
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是直接分配的情况下执行其工作,而不是在URL来自列表时执行其工作?
非常感谢你的帮助,J
附言:为什么论坛软件总是截断我的“Hi all”问候?
发布于 2012-08-28 22:11:41
我终于解决了这个问题!
一旦我退后一步,再想一想,这很容易:我确实从谷歌的Web API得到了答案,这意味着urllib2确实传递了一些东西。但是,它一定是向API后端发送了一些没有任何意义的东西。包含德国地址的URL我很幸运地猜到了问题是由变音引起的。
因此,我只是通过一个函数传递我的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))https://stackoverflow.com/questions/12123926
复制相似问题