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

无法抓取USEPA饮用水化学品标准公开数据:‘failed to load HTTP resource’错误

解决USEPA饮用水标准表格抓取失败的问题

你尝试用XML包抓取USEPA那包含122种化学品的饮用水标准表格,结果跑代码的时候直接弹出Error: failed to load HTTP resource的错误,对吧?我来给你分析下问题出在哪,以及怎么解决。

问题根源分析

  • 首先你用的是HTTP协议的链接,现在很多政府网站都强制要求HTTPS访问,直接发HTTP请求大概率会被服务器拒绝。
  • 另外XML包的readHTMLTable工具比较老旧,对现代网页的兼容性不太好,比如遇到带JS渲染的页面或者简单的反爬机制就容易卡壳。

解决方案一:先换HTTPS链接试试基础调整

先把URL换成HTTPS版本,先不指定列类型,看看能不能正常读取:

library(XML)
url <- "https://www.epa.gov/wqc/national-recommended-water-quality-criteria-human-health-criteria-table"
# 先跳过colClasses,先确认能不能抓到数据
USEPA <- readHTMLTable(url, which = 1, stringAsFactors = FALSE)
# 看看前几行数据
head(USEPA)

如果这个方法还是不行,那咱们换个更靠谱的工具——rvest包,它专门针对现代网页抓取设计,兼容性强很多。

解决方案二:用rvest包实现稳定抓取

rvest是R里现在主流的网页抓取工具,步骤很简单:

  1. 先安装并加载需要的包:
install.packages("rvest")
library(rvest)
# 可选加载dplyr,方便后续整理数据
library(dplyr)
  1. 抓取网页并提取目标表格:
url <- "https://www.epa.gov/wqc/national-recommended-water-quality-criteria-human-health-criteria-table"
# 读取网页内容
page <- read_html(url)
# 提取页面里的第一个表格(就是咱们要的标准表格)
table_data <- page %>% html_table(header = TRUE, trim = TRUE) %>% .[[1]]
# 查看数据结构,确认抓取成功
str(table_data)
  1. 按需调整列类型:
    抓取到数据后,你可以根据自己的需求把列转换成对应类型,比如数值列转成numeric,整数列转成integer:
table_data <- table_data %>%
  mutate(across(c(3,4), as.numeric)) %>% # 假设第3、4列是数值型
  mutate(across(c(2,5), as.integer))    # 假设第2、5列是整数型

额外小技巧

如果遇到服务器返回403禁止访问的错误,大概率是网站的反爬机制把你当成机器人了,这时候可以给请求加个浏览器的User-Agent头,模拟正常用户访问:

page <- read_html(url, user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")

另外记得抓取前看看网站的robots.txt规则,确保咱们的抓取行为符合网站的使用规范哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:18