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

使用Google Places API在R中提取联系信息遇NA值问题

解决Google Maps提取商户电话和网站全为NA的问题

问题原因

google_places()的基础搜索结果(results$results)默认不包含formatted_phone_number和website字段,这两个字段只有通过商户的place_id调用详情接口才能获取。你当前的代码直接从基础搜索结果里提取这两个字段,自然会返回NA。

解决方案

修改代码,对每个搜索到的商户,用其place_id调用google_place_details()接口获取完整信息,再从中提取电话和网站。同时优化字段长度对齐逻辑,避免手动补NA的繁琐操作。

修改后的完整代码

library(tidyverse)
library(googleway)

# 设置API密钥
api_key <- "My_Key"

# 读取城市列表
cities <- read_csv('My_Directory')

# 搜索关键词
search_terms <- "My Search Term"

# 初始化结果列表(比循环rbind数据框更高效)
shops_list <- list()

# 遍历每个城市执行搜索
for (i in 1:nrow(cities)) {
  city <- cities$City[i]
  search_query <- paste(search_terms, city, sep = " ")
  
  # 执行基础地点搜索
  results <- google_places(search_string = search_query, key = api_key)
  
  if (results$status == "OK" && nrow(results$results) > 0) {
    # 遍历每个搜索结果,调用详情接口获取完整信息
    temp_list <- map(results$results$place_id, function(pid) {
      place_details <- google_place_details(place_id = pid, key = api_key)
      
      # 提取字段,不存在则返回NA
      tibble(
        name = place_details$result$name,
        address = place_details$result$formatted_address,
        phone_number = place_details$result$formatted_phone_number %||% NA_character_,
        website = place_details$result$website %||% NA_character_
      )
    })
    
    # 将当前城市的结果合并为数据框,加入列表
    shops_list[[i]] <- bind_rows(temp_list)
  }
}

# 合并所有城市的结果
shops <- bind_rows(shops_list)

关键说明

  • 核心逻辑:通过google_place_details()接口传入商户的place_id,才能拿到电话、网站这类详细信息,这是解决NA问题的关键。
  • 字段安全提取:用%||%运算符(tidyverse内置)自动处理字段不存在的情况,无需手动判断长度补NA。
  • 性能优化:用列表存储中间结果再合并,比循环rbind数据框的效率更高,尤其适合城市数量较多的场景。
  • API配额提醒:调用详情接口会额外消耗API配额,注意查看Google Cloud的费用监控,避免超出预算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:54:55