使用请求形成自动完成 URL 时遇到问题

Posted

技术标签:

【中文标题】使用请求形成自动完成 URL 时遇到问题【英文标题】:Trouble forming an autocompletion url using requests 【发布时间】:2022-01-02 23:35:23 【问题描述】:

当我访问此site 并写入任何地址时,如ENTER A LOCATION 下输入框中的Taekwondo Mattighofen, Am Steinbach, Lochen am See, Austria,我可以在开发工具中看到此autocompletion url,其中包含this 之类的参数。该自动完成网址的完整形式类似于 this,它会产生纬度和经度的值。

不过,我发现在我的以下脚本中使用从上述 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())

如何使用基于请求构建的 python 脚本基于任何地址(如Nachhilfe Mattighofen, Rosengasse, Mattighofen, Austria)生成这样的自动完成 url?

【问题讨论】:

建议来自GoogleMaps API 你为什么要免费卸载一个付费访问这个 API 的网站?看起来非常不道德,很可能是非法的。 【参考方案1】:

如前所述,这些建议来自 GoogleMaps API。

您需要在您的 Google Cloud 帐户中启用结算功能,创建一个项目和一个密钥。然后,很容易获得推荐,如here所述:

import googlemaps
from datetime import datetime

gmaps = googlemaps.Client(key='Add Your Key here')

# Geocoding an address
geocode_result = gmaps.geocode('1600 Amphitheatre Parkway, Mountain View, CA')

这就是网站正在做的事情。他们创建了一个 API 密钥,将其捆绑到网站中,并允许用户获得地理位置建议。他们每次查询都要收费,而且他们可能通过只允许来自其 URL 的请求来保护他们的 API 密钥。

尝试使用第三个网站发送地理定位请求不是一个好主意。他们也很可能拥有 WAF 并阻止您的 IP。

一个开源地理编码服务是Nominatim。您不应期待与 Google 地图一样的准确性和结果。

【讨论】:

以上是关于使用请求形成自动完成 URL 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Importxml 函数时,在 Google 表格中包含单元格引用以形成 URL

乱码问题总结(后续遇到问题不断追加上....)

使用Scrapy编写爬虫程序中遇到的问题及解决方案记录

浏览器从输入URL后到出现页面,这个过程发生了啥?

Vue遇到的问题

使用winpe时遇到,“无法访问x:\.系统资源不足,无法完成请求的服务