能否通过Selenium/BeautifulSoup从CSS translate3d()提取经纬度?
网页地图Marker像素坐标转经纬度及经纬度数据提取方案
首先明确:你看到的transform: translate3d(676px, 360px, 0px)是marker在网页地图容器内的像素相对坐标,和地理经纬度没有直接换算关系——除非能获取该地图的投影参数、容器与实际地理范围的映射规则,这在公开网站上几乎无法实现,所以不用在这个方向浪费精力。
下面是几种直接提取页面经纬度数据的可行方法:
1. 用BeautifulSoup解析网页源代码
大部分房产网站会把经纬度嵌入在网页的meta标签、script标签的JSON数据或隐藏DOM元素中,直接搜索关键词即可:
import requests from bs4 import BeautifulSoup import json url = "https://www.remax.pe/web/search/property/propiedad-otros-en-venta-los-olivos-lima-lima-1029168/" resp = requests.get(url) soup = BeautifulSoup(resp.text, "html.parser") # 查找meta标签中的经纬度 lat_tag = soup.find("meta", attrs={"name": "latitude"}) lng_tag = soup.find("meta", attrs={"name": "longitude"}) if lat_tag and lng_tag: print(f"提取到经纬度: {lat_tag['content']}, {lng_tag['content']}") # 遍历script标签,查找包含经纬度的JSON数据 for script in soup.find_all("script", type="application/json"): try: content = json.loads(script.string) # 根据实际数据结构调整字段查找逻辑 if "property" in content and "location" in content["property"]: loc = content["property"]["location"] print(f"房源经纬度: {loc.get('lat')}, {loc.get('lng')}") except: continue
2. 用Selenium提取动态加载的数据
如果经纬度是通过JS动态渲染或从后端接口异步获取的,可以用Selenium模拟浏览器加载后执行JS提取:
from selenium import webdriver from selenium.webdriver.chrome.options import Options opts = Options() opts.add_argument("--headless=new") driver = webdriver.Chrome(options=opts) driver.get(url) # 尝试从地图实例获取中心经纬度(适配常见的Leaflet/Google Maps) try: center = driver.execute_script("return window.map?.getCenter()") if center: print(f"地图中心经纬度: {center['lat']}, {center['lng']}") except: pass # 提取marker绑定的经纬度数据 try: markers = driver.execute_script("return window.map?.markers") if markers: for marker in markers: pos = marker.getLatLng() print(f"Marker经纬度: {pos['lat']}, {pos['lng']}") except: pass driver.quit()
3. 检查浏览器网络请求
打开浏览器开发者工具(F12)→ 切换到「Network」标签→ 刷新页面,筛选「XHR/Fetch」类型的请求,查看房源详情接口的返回数据,这类接口通常会直接返回包含经纬度的结构化地理信息。
针对你提供的REMAX页面,实际查看后可以发现,页面内嵌的script标签中已经包含了完整的房源地理数据,直接解析即可获取经纬度。
内容的提问来源于stack exchange,提问作者DANIEL HERNANDEZ
相关产品推荐
相关产品推荐

