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

R中修复通过ipleak.net批量获取IP城市信息存入DataFrame的错误

问题修复方案

错误根因

  • 代码存在语法错误:URL拼接语句写法错误,无法生成合法的查询地址
  • 未做请求频率控制:短时间批量请求触发网站反爬机制,返回504网关超时错误
  • 变量名引用错误:解析表格时调用了未定义的table2变量
  • 无异常捕获逻辑:单个IP查询失败会直接中断整个批量任务

修正后完整代码

if (!require("pacman"))
  install.packages("pacman")
pacman::p_load(
  dplyr,
  rvest,
  purrr,
  tidyr
)

# 提取待查询IP并统计原始出现次数
ip_count <- threedsecure_authentication_report_tidy %>% 
  count(shopper_ip, name = "Number of Occurrences")
ip_range <- unique(trimws(ip_count$shopper_ip))

# 批量查询IP地理信息
ip_geo <- purrr::map_df(ip_range, ~ {
  # 控制请求频率,间隔1.5秒,可根据实际情况调整
  Sys.sleep(1.5)
  
  url_reviews <- paste0("https://ipleak.net/?q=", .x)
  
  # 异常捕获:查询失败返回NA,不中断整体任务
  tryCatch({
    page <- read_html(url_reviews) 
    tbls <- html_nodes(page, "table")
    tbls_df <- html_table(tbls)[[1]] # 取返回的第一个表格
    # 提取IP和城市信息
    res <- data.frame(
      IP = tbls_df[1, 2],
      CITY = tbls_df[7, 2]
    )
    return(res)
  }, error = function(e) {
    # 打印失败的IP方便后续排查
    message(paste0("查询失败:", .x, ",错误信息:", e$message))
    return(data.frame(
      IP = .x,
      CITY = NA_character_
    ))
  })
})

# 关联出现次数,生成最终结构的表
final_result <- ip_geo %>%
  left_join(ip_count, by = c("IP" = "shopper_ip"))

关键修改说明

  • 增加Sys.sleep控制请求间隔,避免触发网站访问频率限制
  • 补充tryCatch异常捕获逻辑,单个IP查询失败不会中断整体流程,同时输出失败日志方便排查
  • 修正了变量名、URL拼接的语法错误
  • 提前统计IP的出现次数,最后关联生成要求的IP/CITY/Number of Occurrences结构的输出表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:04