谷歌http://maps.google.com/maps/geo非英语字符查询

2024-10-01 09:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Python(使用urllib2)解析器,其中包含非英语字符。目标是找到每个地址的坐标。在

当我在Firefox中打开这个url时:

http://maps.google.com/maps/geo?q=Czech%20Republic%2010000%20Male%C5%A1ice&output=csv

它被转换(地址框中的更改)为

^{pr2}$

和回报

200,6,50.0865113,14.4918052

这是一个正确的结果。在

但是,如果我在urllib2中打开同一个url(编码,带有%20等),结果是

200,4,49.7715220,13.2955410

这是不正确的。如何打开urllib2中的第一个url以获得“200,6,50.0865113,14.4918052”结果?在

编辑:

使用的代码

import urllib2

psc = '10000'
name = 'Malešice'
url = 'http://maps.google.com/maps/geo?q=%s&output=csv' % urllib2.quote('Czech Republic %s %s' % (psc, name))

response = urllib2.urlopen(url)
data = response.read()

print 'Parsed url %s, result %s\n' % (url, data)

输出

Parsed url http://maps.google.com/maps/geo?q=Czech%20Republic%2010000%20Male%C5%A1ice&output=csv, result 200,4,49.7715220,13.2955410


Tags: csvnamecomhttpurloutputdataresponse
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:10

我能重现这种行为,一开始我很惊讶为什么会发生这种事。对带有wireshark的HTTP请求进行更仔细的检查,发现Firefox发送的请求(不出意外)包含了更多的HTTP头。在

最后发现是Accept-Language头文件造成了不同。只有在

  • 设置了Accept-Language标头
  • 而且首先列出的是非英语语言(优先级似乎并不重要)

因此,例如这个Accept-Language头可以工作:

headers = {'Accept-Language': 'de-ch,en'}

总而言之,像这样修改你的代码对我有用:

^{pr2}$

注意:在我看来,这是谷歌地理编码API中的一个缺陷。Accept-Language报头表示用户代理更喜欢使用哪种语言的内容,但它不应该对如何解释请求产生任何影响。在

相关问题 更多 >