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

使用R语言调用freegeoip接口获取IP地理信息时遇XML解析错误求助

问题原因与解决方案
  • 错误根源:你使用的freegeoip.net服务已经停止运营,现在访问该地址返回的是HTML错误页面,而非预期的XML数据,XML解析器因HTML标签不匹配抛出了Opening and ending tag mismatch错误。

  • 解决方案:替换为仍在提供服务的免费IP地理编码API,比如ip-api的XML接口,以下是修改后的可运行代码:

ips <- c(Louvre           ="213.139.122.103",
         British.Museum   ="195.224.71.221",
         Museo.del.Prado  ="213.27.146.137",
         Grand.Egyptian   ="163.121.93.15",
         Hermitage.Museum ="213.152.151.197",
         MBNA             ="200.218.240.120",
         Sydney.Museum    ="54.252.89.136",
         MOMA             ="63.117.124.131")

library(XML)
library(httr)
get.geocode <- function(ip) {  # 返回IP对应的经纬度
  # 替换为ip-api的XML接口
  url <- "http://ip-api.com/xml"
  # 发送请求并指定IP参数
  xml <- content(GET(url, query = list(query = ip)), type = "text/xml")
  # ip-api的XML标签为<lat>和<lon>,调整xpath匹配新结构
  xpath <- c(lat="//lat", long="//lon")
  sapply(xpath, function(xp) as.numeric(xmlValue(xml[xp][[1]])))
}

# ip-api免费版限制每分钟最多45次请求,添加延时避免触发限制
locs <- data.frame(t(sapply(ips, function(ip) {
  Sys.sleep(1) # 每次请求间隔1秒
  get.geocode(ip)
})))

print(locs)
  • 补充说明:ip-api免费版有请求频率限制,若需要更高请求量,可查看其付费方案或更换其他符合需求的API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:54:19