如何用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
相关产品推荐
相关产品推荐

