【问题标题】:Google http://maps.google.com/maps/geo query with non-english characters使用非英语字符的 Google http://maps.google.com/maps/geo 查询
【发布时间】:2012-09-27 16:16:06
【问题描述】:

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

当我在 Firefox 中打开此网址时:

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

它被转换(地址框中的变化)为

http://maps.google.com/maps/geo?q=Czech Republic 10000 Malešice&output=csv

然后返回

200,6,50.0865113,14.4918052

这是一个正确的结果。

但是,如果我在 urllib2(或 Opera 浏览器)中打开相同的 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

【问题讨论】:

标签: python google-maps urllib google-geocoding-api


【解决方案1】:

我可以重现这种行为,起初我对它发生的原因感到目瞪口呆。使用wireshark 仔细检查 HTTP 请求表明,Firefox 发送的请求(不足为奇)包含更多的 HTTP 标头。

最终结果是 Accept-Language 标头有所不同。只有在

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

所以,例如这个 Accept-Language 标头有效:

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

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

# -*- coding: utf-8 -*-
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))
headers = {'Accept-Language': 'de-ch,en'}

req = urllib2.Request(url, None, headers)
response = urllib2.urlopen(req)
data = response.read()

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

注意:在我看来,这是 Google 地理编码 API 中的一个错误。 Accept-Language 标头指示用户代理更喜欢内容的语言,但它对请求的解释方式没有任何影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2013-01-05
    相关资源
    最近更新 更多