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

如何用Python提交表单获取预期结果?地理位置数据获取遇阻

解决无法从findlatitudeandlongitude.com获取地理位置数据的问题

我来帮你捋捋这个问题的症结,还有可行的解决办法:

问题根源

你用requests直接发起GET/POST请求拿不到数据,主要有两个核心原因:

  1. 动态数据渲染:这个网站的经纬度结果是通过JavaScript动态加载的,你用requests拿到的只是静态HTML骨架,还没等到页面渲染出实际的地理位置数据。
  2. 请求验证拦截:网站可能会检查请求头(比如是否有合法的User-Agent)、Cookie等信息,直接用requests默认的请求头容易被识别为非浏览器请求,导致返回内容不完整。

解决方案1:用Selenium模拟浏览器(新手友好,直观可靠)

Selenium可以模拟真实浏览器的操作流程,等待页面完全加载后再提取数据,完美解决动态渲染的问题。

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome浏览器(需提前安装对应版本的ChromeDriver)
driver = webdriver.Chrome()
try:
    # 打开目标网站
    driver.get('https://www.findlatitudeandlongitude.com/')
    
    # 定位地址输入框并输入目标地址
    address_input = driver.find_element(By.ID, 'address')
    address_input.send_keys('你要查询的具体地址')
    
    # 点击搜索按钮
    search_btn = driver.find_element(By.ID, 'btnfind')
    search_btn.click()
    
    # 等待结果加载完成,提取经纬度
    wait = WebDriverWait(driver, 10)
    latitude = wait.until(EC.presence_of_element_located((By.ID, 'latitude'))).get_attribute('value')
    longitude = wait.until(EC.presence_of_element_located((By.ID, 'longitude'))).get_attribute('value')
    
    print(f"查询到的纬度: {latitude}, 经度: {longitude}")
finally:
    # 关闭浏览器
    driver.quit()

注意:需要先安装Selenium(pip install selenium),并下载对应浏览器版本的驱动(比如ChromeDriver)放在环境变量可访问的路径里。

解决方案2:抓包获取真实API接口(更高效,无需浏览器)

如果你不想用浏览器模拟,可以通过浏览器开发者工具抓包,找到网站实际请求的API接口,直接调用这个接口拿数据:

  1. 打开浏览器F12进入开发者工具,切换到「Network」标签;
  2. 在网站输入地址并点击搜索,观察XHR/fetch类型的请求,找到返回经纬度的接口;
  3. 复制该接口的URL、请求头、请求参数,用requests直接调用。

示例代码(以抓包到的接口为例,实际需以你抓包结果为准):

import requests

# 从抓包结果里复制完整的请求头,至少要包含User-Agent
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Referer': 'https://www.findlatitudeandlongitude.com/',
    # 若需要Cookie也一并复制
}

# 抓包到的请求参数
data = {
    'address': '你要查询的具体地址',
    # 其他可能的参数比如token,从抓包的Form Data里复制
}

# 替换成你抓包到的真实API地址
api_url = 'https://www.findlatitudeandlongitude.com/实际的API接口路径'
response = requests.post(api_url, headers=headers, data=data)

# 解析JSON结果
result = response.json()
print(f"纬度: {result['latitude']}, 经度: {result['longitude']}")

额外提示

  • 无论用哪种方法,都要遵守网站的robots.txt规则,不要频繁请求,避免IP被封禁;
  • 如果你只是需要地址转经纬度的功能,也可以考虑使用更稳定的第三方地理编码API(比如国内的高德、百度地图API,需要申请密钥,但数据可靠性更高)。

内容的提问来源于stack exchange,提问作者user9463814

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:29