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

在R中爬取HTML表格遇unknown protocol错误的解决咨询

嘿,我来帮你搞定这两个问题!先聊聊你碰到的unknown protocol错误,再一步步教你把德国气象站的数据爬成R里的data.frame~

一、解决R爬虫中的unknown protocol错误

这个错误说白了就是R认不出你要访问的网址用的是什么网络协议,大概率是以下几种情况,对应解决办法给你列好了:

  • 先检查URL的基础格式! 这是最容易踩的坑:确保你的网址开头是http://或者https://,没有多余的空格、换行,也别把拼写搞错(比如写成htttp://或者漏写一个斜杠http:/)。比如你复制网址的时候不小心带了开头的空格,R就会懵圈,一定要仔细核对一遍。
  • 转码特殊字符:如果网址里有中文、空格或者&、%这类特殊符号,先用URLencode()转码,比如:
    raw_url <- "https://example.com/德国气象站数据"
    encoded_url <- URLencode(raw_url)
    
  • 处理代理问题:要是你在公司或校园网里,可能得设置代理才能访问外部网站。用httr包就能搞定:
    library(httr)
    set_config(use_proxy("你的代理地址", 端口号)) # 比如 use_proxy("192.168.1.1", 8080)
    
  • 更新爬虫相关包:旧版本的rvest、httr这类包可能有协议解析的bug,更新一下就好:
    update.packages(c("rvest", "httr", "XML"), ask = FALSE)
    
  • 手动获取页面内容:如果直接用read_html()失败,试试先手动发请求再解析:
    library(httr)
    library(rvest)
    resp <- GET("你的目标URL")
    if (http_status(resp)$category == "Success") {
      page <- read_html(content(resp, "text"))
    } else {
      stop("请求失败:", http_status(resp)$message)
    }
    
二、爬取德国气象站数据到data.frame

德国气象局(DWD)是最靠谱的数据源,他们有超多公开的气象数据,既有HTML表格,也有CSV、NetCDF这类结构化文件。这里给你一套通用流程,你可以按需调整:

1. 先准备好工具

加载常用的R包:

library(rvest)
library(dplyr) # 用来清洗数据超方便

2. 找好目标页面

比如我们爬取DWD公开的月度气温数据页面(替换成你需要的实际网址就行,比如某具体站点的历史数据页):

# 示例:DWD的月度气温历史数据索引页
url <- "https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/monthly/air_temperature/historical/"
# 如果是具体站点的表格页,比如:
# url <- "https://example-dwd-station-page.de/monthly-weather.html"

3. 提取表格数据

# 读取HTML页面
page <- read_html(url)

# 提取页面里所有的表格,fill=TRUE用来处理不规则的表格
all_tables <- html_table(page, fill = TRUE)

# 选你需要的表格(一般用索引[[1]]取第一个,多试几个索引总能找到)
weather_df <- all_tables[[1]]

4. 清洗数据(必不可少的一步)

爬下来的表格往往有多余的表头、空行或者格式混乱,比如:

# 删掉全是空值的行
weather_df <- weather_df %>% filter(!if_all(everything(), is.na))

# 给列改个清晰的名字(根据实际表格内容调整)
colnames(weather_df) <- c("观测日期", "平均气温", "最高气温", "最低气温")

# 把字符型的温度转成数值型,方便后续分析
weather_df <- weather_df %>% mutate(across(c(平均气温, 最高气温, 最低气温), as.numeric))

5. 进阶:直接下载结构化数据

DWD很多时候会提供CSV格式的数据(打包成zip),直接下载读取更高效:

# 示例:下载某站点的气温历史数据压缩包
csv_url <- "https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/monthly/air_temperature/historical/tm_01085_195101_202312_hist.zip"

# 临时下载文件并解压
temp_file <- tempfile()
download.file(csv_url, temp_file)
unzip(temp_file, exdir = "./weather_data")

# 读取解压后的CSV文件(注意分隔符可能是分号,不是逗号)
weather_csv_df <- read.csv("./weather_data/tm_01085_195101_202312_hist.txt", sep = ";", header = TRUE)

内容的提问来源于stack exchange,提问作者Andy.Jian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:10:47