You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用requests构造KTM官网地址自动补全URL获取经纬度

我访问KTM阿联酋经销商查询页面时,在ENTER A LOCATION下方的输入框中输入任意地址,例如Taekwondo Mattighofen, Am Steinbach, Lochen am See, Austria,可以在开发者工具中看到对应的自动补全请求,该接口会返回经纬度数值。

目前我已经可以手动从该API获取经纬度,代入以下脚本成功得到经销商查询结果:

import requests
from bs4 import BeautifulSoup

link = 'https://www.ktm.com/content/websites/ktm-com/middle-east/ae/en/dealer-search/jcr:content/root/responsivegrid_1_col/dealersearch.dealers.json'
params = {
    'latitude': '48.0075483',
    'longitude': '13.1848824',
    'country': '',
    'qualification': '',
    'distance': '50'
}

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    res = s.get(link,params=params)
    print(res.json())

请问如何基于requests编写Python脚本,针对任意地址(例如Nachhilfe Mattighofen, Rosengasse, Mattighofen, Austria)构造对应的自动补全URL,自动获取经纬度完成查询?


实现方案

你可以通过两次请求实现全流程自动化:首先调用KTM官方的地址自动补全接口拿到输入地址对应的经纬度,再代入已有的经销商查询接口即可,完整可运行代码如下:

import requests

def get_address_coordinate(target_address):
    # KTM站点通用地址补全接口
    geo_search_api = "https://www.ktm.com/bin/ktm/com/geosearch/search.json"
    req_headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
        'Referer': 'https://www.ktm.com/en-ae/find-a-dealer.html'
    }
    req_params = {
        'q': target_address,
        'lang': 'en_AE'
    }
    resp = requests.get(geo_search_api, params=req_params, headers=req_headers)
    resp.raise_for_status()
    search_result = resp.json()
    if not search_result:
        raise ValueError("输入地址未匹配到结果,请检查地址格式")
    # 取匹配度最高的第一个结果的经纬度
    return search_result[0]['latitude'], search_result[0]['longitude']

def search_nearby_dealer(lat, lng, search_radius=50):
    dealer_query_api = 'https://www.ktm.com/content/websites/ktm-com/middle-east/ae/en/dealer-search/jcr:content/root/responsivegrid_1_col/dealersearch.dealers.json'
    req_headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    }
    req_params = {
        'latitude': str(lat),
        'longitude': str(lng),
        'country': '',
        'qualification': '',
        'distance': str(search_radius)
    }
    with requests.Session() as s:
        res = s.get(dealer_query_api, params=req_params, headers=req_headers)
        res.raise_for_status()
        return res.json()

if __name__ == '__main__':
    # 替换为你需要查询的任意地址即可
    input_address = "Nachhilfe Mattighofen, Rosengasse, Mattighofen, Austria"
    lat, lng = get_address_coordinate(input_address)
    dealer_list = search_nearby_dealer(lat, lng, search_radius=50)
    print(dealer_list)

补充说明

  • search_radius参数为查询半径,单位为公里,可根据需求自行调整
  • 若需要查询其他国家/地区的KTM经销商,需要对应修改lang参数和经销商查询接口的路径
  • 可以自行添加异常捕获逻辑处理地址匹配失败、接口请求超时等异常情况

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:03