0

我已经将 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 时会完成其工作,但如果它来自列表则不会?

非常感谢您的帮助,J

PS:论坛软件总是切断我的“大家好”的问候是有原因的吗?

4

1 回答 1

0

我终于解决了这个问题!

一旦我退后一步并再次考虑它,这很容易:我确实从谷歌的 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))
于 2012-08-28T14:11:41.003 回答