【问题标题】:Web-Scraping in R programming (rvest)R 编程中的 Web-Scraping (rvest)
【发布时间】:2020-04-08 02:19:27
【问题描述】:

我正在尝试收集所有详细信息(旅客类型、座位类型、路线、飞行日期、座位舒适度、客舱工作人员服务、食品和饮料、机上娱乐、地面服务、Wifi 和连接、物有所值) 包括星级

来自航空公司质量网页

https://www.airlinequality.com/airline-reviews/emirates/

没有按预期工作

my_url<- c("https://www.airlinequality.com/airline-reviews/emirates/")

review <- function(url){
    review<- read_html(url) %>%
    html_nodes(".review-value") %>%
    html_text%>%
    as_tibble()   
   }
output <- map_dfr(my_url, review )

只能刮星级,我需要所有详细信息(例如客舱工作人员服务 - 等级 2 ,食品和饮料 = 等级 5)

star <- function(url){ 
  stars_sq <- read_html(url) %>%
    html_nodes(".star") %>%
    html_attr("class") %>%
    as.factor() %>%
    as_tibble()
}

output_star<- map_dfr(my_url, star )

结果的输出应该是表格形式:

column :旅行者类型、座位类型、路线、飞行日期、座位舒适度 .... 以及星级
:每条评论

【问题讨论】:

    标签: r web-scraping tidyverse rvest purrr


    【解决方案1】:

    这有点复杂,因为您需要将已填充/未填充的星标制成表格以获取每个字段的评分。我会使用html_table() 提供帮助,然后重新插入计算出的星值:

    require(tibble)
    require(purrr)
    require(rvest)
    
    my_url <- c("https://www.airlinequality.com/airline-reviews/emirates/")
    
    count_stars_in_cell <- function(cell)
    {
      html_children(cell) %>% 
      html_attr("class")  %>%
      equals("star fill") %>% 
      which               %>% 
      length
    }
    
    get_ratings_each_review <- function(review) 
    {
      review                             %>%
      html_nodes(".review-rating-stars") %>%
      lapply(count_stars_in_cell)        %>%
      unlist
    }
    
    all_tables <- read_html(my_url)      %>%
                  html_nodes("table")
    
    reviews <- lapply(all_tables, html_table)
    
    ratings <- lapply(all_tables, get_ratings_each_review)
    
    for (i in seq_along(reviews))
    {
      reviews[[i]]$X2[reviews[[i]]$X2 == "12345"] <- ratings[[i]]
    }
    
    print(reviews)
    

    这会为您提供一个列表,其中每个评论都有一个表格。这些应该可以直接组合成一个数据框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多