求助:用R/Python+Selenium爬取谷歌地图披萨店信息
使用R+Selenium爬取谷歌地图披萨店数据问题
我正在使用R编程语言,学习如何通过Selenium与网页进行交互。
目标示例: 通过谷歌地图获取特定区域内所有披萨店的名称、地址及经纬度,预期流程为:输入目标位置→点击“附近”按钮→输入搜索内容(如“pizza”)→滚动至页面底部加载全部结果→提取所需信息。
已完成操作
第一部分:搜索地址并返回经纬度
library(RSelenium) library(wdman) library(netstat) selenium() seleium_object <- selenium(retcommand = T, check = F) remote_driver <- rsDriver(browser = "chrome", chromever = "114.0.5735.90", verbose = F, port = free_port()) remDr<- remote_driver$client remDr$navigate("https://www.google.com/maps") search_box <- remDr$findElement(using = 'css selector', "#searchboxinput") search_box$sendKeysToElement(list("Statue of Liberty", key = "enter")) Sys.sleep(5) url <- remDr$getCurrentUrl()[[1]] long_lat <- gsub(".*@(-?[0-9.]+),(-?[0-9.]+),.*", "\\1,\\2", url) long_lat <- unlist(strsplit(long_lat, ",")) # 输出结果 # long_lat # [1] "40.7269409" "-74.0906116"
第二部分:搜索特定位置周边的披萨店
library(RSelenium) library(wdman) library(netstat) selenium() seleium_object <- selenium(retcommand = T, check = F) remote_driver <- rsDriver(browser = "chrome", chromever = "114.0.5735.90", verbose = F, port = free_port()) remDr<- remote_driver$client remDr$navigate("https://www.google.com/maps") Sys.sleep(5) search_box <- remDr$findElement(using = 'css selector', "#searchboxinput") search_box$sendKeysToElement(list("40.7256456,-74.0909442", key = "enter")) Sys.sleep(5) search_box <- remDr$findElement(using = 'css selector', "#searchboxinput") search_box$clearElement() search_box$sendKeysToElement(list("pizza", key = "enter")) Sys.sleep(5)
当前问题与元素定位规律
目前卡在后续步骤:
- 不知道如何滚动页面底部加载全部披萨店结果
- 不知道如何提取餐厅名称
通过检查HTML代码,已定位到元素规律:
- 餐厅名称:
<a class="hfpxzc" aria-label=标签 - 餐厅地址:
<div class="W4Efsd">标签
期望输出格式
希望最终得到如下结构的数据框:
name address longitude latitude 1 pizza land 123 fake st, city, state, zip code 45.212 -75.123
请求帮助
请指导如何完成后续的滚动加载、名称提取及经纬度匹配步骤。
补充说明: 若Python+Selenium的解决方案更成熟,也可提供Python代码,我会自行转换为R代码。
更新:地址提取进展
remDr$navigate("https://www.google.com/maps") Sys.sleep(5) search_box <- remDr$findElement(using = 'css selector', "#searchboxinput") search_box$sendKeysToElement(list("40.7256456,-74.0909442", key = "enter")) Sys.sleep(5) search_box <- remDr$findElement(using = 'css selector', "#searchboxinput") search_box$clearElement() search_box$sendKeysToElement(list("pizza", key = "enter")) Sys.sleep(5) address_elements <- remDr$findElements(using = 'css selector', '.W4Efsd') addresses <- lapply(address_elements, function(x) x$getElementText()[[1]]) result <- data.frame(name = unlist(names), address = unlist(addresses))
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

