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

R语言新手求助:如何用rvest包抓取航空安全数据为数据框?

航空安全数据抓取与数据框转换指南(R语言零基础友好)

嘿,作为完全零基础的新手,接到这个项目确实有点头大,但别担心,咱们一步步来,用R语言搞定这个数据抓取和转换的任务,全程都是新手友好的操作~

第一步:安装并加载必要的工具包

首先咱们需要两个核心包:

  • rvest:专门用来处理网页抓取,语法简单,适合新手
  • dplyr:用来轻松整理数据成数据框,操作直观

打开RStudio(或者R控制台),运行以下代码安装包:

install.packages(c("rvest", "dplyr"))

安装完成后,加载这两个包:

library(rvest)
library(dplyr)

第二步:读取目标网页内容

先把目标网站的URL存成变量,然后用read_html()函数读取网页内容:

# 目标网站URL
target_url <- "http://aviation-safety.net/database/"

# 读取网页内容
web_page <- read_html(target_url)

小提示:如果运行时出现访问失败的提示,可能是网站的反爬机制,可以尝试设置请求头(模拟浏览器访问),代码可以改成:

web_page <- read_html(target_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")

第三步:定位并提取需要的数据

这个网站的核心数据大概率是放在HTML表格里的,咱们先尝试直接提取表格:

# 提取网页中所有表格,fill=TRUE用来处理不规则表格
all_tables <- html_table(web_page, fill = TRUE)

# 查看有多少个表格,找到咱们需要的那个(一般第一个就是主数据表格)
length(all_tables)

# 取出目标表格,赋值给df
df <- all_tables[[1]]

# 查看表格的列名,确认是否包含「机型」「年份」「国家」「航司」这些字段
colnames(df)

如果表格里的字段和咱们需要的对应上了,那恭喜你,这一步就搞定了!如果不是表格形式(比如数据散在div里),咱们就用CSS选择器来定位元素:

  1. 打开目标网站,按F12打开浏览器开发者工具
  2. 用「选择元素」工具点击你需要的字段(比如某一个机型名称),查看右侧的CSS选择器(比如.data-row .model)
  3. 用以下代码提取对应数据:
# 提取机型数据
models <- web_page %>% 
  html_elements(".data-row .model") %>%  # 替换成你找到的机型选择器
  html_text() %>%  # 提取文本内容
  trimws()  # 去掉前后空格

# 同理提取年份、国家、航司
years <- web_page %>% 
  html_elements(".data-row .year") %>%  # 替换成年份对应的选择器
  html_text() %>% 
  trimws()

countries <- web_page %>% 
  html_elements(".data-row .country") %>%  # 替换成国家对应的选择器
  html_text() %>% 
  trimws()

airlines <- web_page %>% 
  html_elements(".data-row .airline") %>%  # 替换成航司对应的选择器
  html_text() %>% 
  trimws()

第四步:把数据整合成数据框

不管是从表格提取的,还是用选择器提取的,最后都要整理成标准的数据框:

  • 如果是表格提取的,直接用df即可,还可以用dplyr清洗:
# 清洗表格数据,比如转换年份为数值型,去掉无用列
cleaned_df <- df %>%
  mutate(年份 = as.numeric(年份)) %>%  # 把年份转成数字格式
  select(机型, 年份, 国家, 航司)  # 只保留咱们需要的列
  • 如果是用选择器提取的向量,就组合成数据框:
# 用tibble(dplyr里的增强版数据框)组合数据
final_df <- tibble(
  机型 = models,
  年份 = years,
  国家 = countries,
  航司 = airlines
)

# 同样可以做清洗,比如转换年份为数值型
final_df <- final_df %>%
  mutate(年份 = as.numeric(年份))

第五步:新手必看的注意事项

  • 反爬机制:不要短时间内频繁请求网站,最好在多页抓取时加Sys.sleep(1)(每次请求后暂停1秒),避免被网站封禁IP
  • 数据清洗:提取的数据可能有空格、缺失值,用trimws()去空格,na.omit()删除缺失行,mutate()转换数据类型
  • 遵守规则:查看网站的robots.txt(比如访问网站根目录下的robots.txt文件),确认哪些内容可以抓取,不要违反网站的使用条款

内容的提问来源于stack exchange,提问作者B.LIANG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:11:03