gpt4 book ai didi

python - 为什么在使用浏览器或请求访问页面时来自 nomatim 的响应不同?

转载 作者:行者123 更新时间:2023-11-28 21:50:44 25 4
gpt4 key购买 nike

我正在从这个 URL 获取 JSON 数据

http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1

这是在网络浏览器上查看时的输出

[{"display_name":"San Francisco City and County, California, United States of America","class":"boundary","type":"administrative","importance":0.88836369596997,"icon":"http:\/\/nominatim.openstreetmap.org\/images\/mapicons\/poi_boundary_administrative.p.20.png","address":{"county":"San Francisco City and County","state":"California","country":"United States of America","country_code":"us"}}]

当我从一个简单的 python 程序中获取相同的 URL 时

import requests

r = requests.get('http://nominatim.openstreetmap.org/?q=san%20francisco&format=json&addressdetails=1&limit=1')
json_data = r.json()

print json_data

这是我得到的,

[{u'display_name': u'SF, California, United States of America', u'importance': 0.68836369596997, u'place_id': u'127766562', u'lon': u'-122.4629897', u'lat': u'37.7647993', u'osm_type': u'relation', u'licence': u'Data \xa9 OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', u'osm_id': u'396487', u'boundingbox': [u'37.63983', u'37.9298443', u'-123.1738249', u'-122.2817799'], u'type': u'administrative', u'class': u'boundary', u'address': {u'county': u'SF', u'country': u'United States of America', u'state': u'California', u'country_code': u'us'}, u'icon': u'http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png'}]

注意 display_name 以 SF,California, Unite..... 开头

我试过删除所有历史记录/cookies/缓存,甚至重新启动计算机

这是怎么回事?

最佳答案

服务器查找Accept-Language header ;不要发送一个,你会得到缩写,发送一个说明你接受英语,你会得到全名:

>>> import requests
>>> url = 'http://nominatim.openstreetmap.org/'
>>> params = {'q': 'san francisco', 'format': 'json', 'addressdetails': 1, 'limit': 1}
>>> requests.get(url, params=params).json()[0]['display_name']
u'SF, California, United States of America'
>>> requests.get(url, params=params, headers={'Accept-Language': 'en'}).json()[0]['display_name']
u'San Francisco City and County, California, United States of America'

Nomatim documentation确实提到使用了 header ,但可以通过在查询字符串中指定 accept-language 参数来覆盖:

>>> print requests.get(url, params=dict(params, **{'accept-language': 'pt'})).json()[0]['display_name']
SF, Califórnia, Estados Unidos da América

关于python - 为什么在使用浏览器或请求访问页面时来自 nomatim 的响应不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com