在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)
关键优化点说明:
- 精准定位航班节点:不再抓取整个
flight_detail的文本,而是定位每个航班对应的flight-row节点,这样每个节点就是一条完整的航班记录,避免文本混乱。 - 结构化提取字段:针对每个航班节点,分别提取航班号、航空公司、目的地等关键信息,直接生成结构化的DataFrame,后续分析、导出都很方便。
- 处理缺失值:如果实际起飞时间为空(航班还没起飞),自动替换为
NA,让数据更规范。
如果之后网页结构有变化,你可以用浏览器开发者工具(F12)查看元素的类名,调整html_node()里的选择器(比如.flight-number)就行。
内容的提问来源于stack exchange,提问作者Shardul Pendharkar
相关产品推荐
相关产品推荐

