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

如何用R的rvest包抓取网页点击式地图的经纬度坐标

爬取动态加载的地图经纬度方案

由于目标页面的地图链接是通过点击「Ver Mapa」按钮后动态生成的,静态爬虫工具(比如rvest)无法直接获取这类JS渲染的内容,需要使用能模拟浏览器交互的动态爬虫工具,以下是两种可行的实现方案:

方案一:使用RSelenium

RSelenium可以模拟浏览器的完整操作流程,包括点击按钮、等待动态内容加载:

library(RSelenium)
library(stringr)

# 启动Chrome驱动(需确保本地Chrome版本与驱动匹配)
driver <- rsDriver(browser = "chrome")
remDr <- driver[["client"]]

# 访问目标页面
target_url <- "https://clasipar.paraguay.com/inmuebles/propiedades-rurales/granja-sobre-asfalto-con-infraestructura-completa-2093966"
remDr$navigate(target_url)

# 模拟点击「Ver Mapa」按钮(可根据页面实际结构调整选择器)
ver_mapa_btn <- remDr$findElement(using = "xpath", value = "//button[contains(text(), 'Ver Mapa')]")
ver_mapa_btn$clickElement()

# 等待地图iframe加载完成(根据网络情况调整等待时间)
Sys.sleep(3)

# 获取地图iframe的src链接
map_iframe <- remDr$findElement(using = "css", value = "#map-canvas iframe")
map_src <- map_iframe$getElementAttribute("src")[[1]]

# 从链接中提取经纬度
coords_raw <- str_extract(map_src, "q=(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)") %>% str_remove("q=")
lat_lng <- str_split(coords_raw, ",")[[1]]
latitude <- as.numeric(lat_lng[1])
longitude <- as.numeric(lat_lng[2])

# 输出结果
cat("纬度:", latitude, "\n经度:", longitude, "\n")

# 关闭浏览器驱动
remDr$close()
driver$server$stop()

方案二:使用Playwright for R

Playwright是更现代的自动化测试工具,自带浏览器管理功能,无需手动匹配驱动版本:

library(playwright)
library(stringr)

# 初始化并启动Chrome浏览器(headless=FALSE可可视化操作过程)
pw <- playwright$chromium$launch(headless = FALSE)
page <- pw$new_page()

# 访问目标页面
page$goto("https://clasipar.paraguay.com/inmuebles/propiedades-rurales/granja-sobre-asfalto-con-infraestructura-completa-2093966")

# 点击「Ver Mapa」按钮
page$click("text=Ver Mapa")

# 等待地图iframe加载完成(显式等待更可靠)
page$wait_for_selector("#map-canvas iframe")

# 获取iframe的src链接
map_src <- page$eval_on_selector("#map-canvas iframe", "el => el.src")

# 解析经纬度
coords_raw <- str_extract(map_src, "q=(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)") %>% str_remove("q=")
lat_lng <- str_split(coords_raw, ",")[[1]]
latitude <- as.numeric(lat_lng[1])
longitude <- as.numeric(lat_lng[2])

# 输出结果
cat("纬度:", latitude, "\n经度:", longitude, "\n")

# 关闭资源
page$close()
pw$close()

注意事项

  • 批量爬取时需设置合理的请求间隔,避免触发网站反爬机制
  • 页面元素选择器(如按钮的xpath/css)可能会随网站更新变化,需根据实际页面结构调整
  • 若使用RSelenium,需确保本地浏览器版本与驱动版本一致,否则会启动失败

内容的提问来源于stack exchange,提问作者Funkeh-Monkeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:45:34