我正在创建一个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
我能重现这种行为,一开始我很惊讶为什么会发生这种事。对带有wireshark的HTTP请求进行更仔细的检查,发现Firefox发送的请求(不出意外)包含了更多的HTTP头。在
最后发现是
Accept-Language
头文件造成了不同。只有在Accept-Language
标头因此,例如这个
Accept-Language
头可以工作:总而言之,像这样修改你的代码对我有用:
^{pr2}$注意:在我看来,这是谷歌地理编码API中的一个缺陷。
Accept-Language
报头表示用户代理更喜欢使用哪种语言的内容,但它不应该对如何解释请求产生任何影响。在相关问题 更多 >
编程相关推荐