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

在R中将字符串列表转为DataFrame及纽瓦克机场航班爬取代码咨询

问题2:优化纽瓦克自由国际机场航班时刻表爬取代码

你的基础代码已经完成了文本清理,但现在得到的是一串合并后的文本,没法直接分析。我帮你把代码改成结构化提取,直接得到可用的航班DataFrame:

优化后的完整代码

library(rvest)
library(dplyr)
library(stringr)

# 读取目标网页
url <- read_html('https://www.airport-ewr.com/newark-departures-terminal-C? tp=6&day=tomorrow')

# 定位每个航班的行节点(比直接抓整个文本更精准)
flight_rows <- url %>% html_nodes(xpath = '//*[@id="flight_detail"]//div[contains(@class, "flight-row")]')

# 逐个提取每个航班的字段
flight_df <- map_dfr(flight_rows, function(row) {
  # 提取各个字段,用trimws清理多余空格
  flight_num <- row %>% html_node('.flight-number') %>% html_text() %>% trimws()
  airline <- row %>% html_node('.airline-name') %>% html_text() %>% trimws()
  destination <- row %>% html_node('.flight-destination') %>% html_text() %>% trimws()
  scheduled_dep <- row %>% html_node('.time-scheduled') %>% html_text() %>% trimws()
  actual_dep <- row %>% html_node('.time-actual') %>% html_text() %>% trimws()
  status <- row %>% html_node('.flight-status') %>% html_text() %>% trimws()
  
  # 整理成一行数据,空值替换为NA
  tibble(
    Flight_Number = flight_num,
    Airline = airline,
    Destination = destination,
    Scheduled_Departure = scheduled_dep,
    Actual_Departure = ifelse(actual_dep == "", NA, actual_dep),
    Status = status
  )
})

# 查看前几行结果
head(flight_df)

关键优化点说明:

  1. 精准定位航班节点:不再抓取整个flight_detail的文本,而是定位每个航班对应的flight-row节点,这样每个节点就是一条完整的航班记录,避免文本混乱。
  2. 结构化提取字段:针对每个航班节点,分别提取航班号、航空公司、目的地等关键信息,直接生成结构化的DataFrame,后续分析、导出都很方便。
  3. 处理缺失值:如果实际起飞时间为空(航班还没起飞),自动替换为NA,让数据更规范。

如果之后网页结构有变化,你可以用浏览器开发者工具(F12)查看元素的类名,调整html_node()里的选择器(比如.flight-number)就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:55:15