R 编程中的网页抓取 (rvest)
Web-Scraping in R programming (rvest)
我正在尝试抓取所有详细信息(旅客类型、座位类型、航线、飞行日期、座位舒适度、机舱员工服务、食品和饮料、机上娱乐、地面服务、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 )
结果的输出应该是table形式:
列:旅行者类型、座位类型、航线、飞行日期、座位舒适度....带有星级
行 : 每条评论
这有点复杂,因为您需要将 filled/unfilled 颗星制成表格以获得每个字段的评分。我会使用 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)
这会为您提供一个列表,每个评论都有一个 table。这些应该很容易组合成一个数据框。
我正在尝试抓取所有详细信息(旅客类型、座位类型、航线、飞行日期、座位舒适度、机舱员工服务、食品和饮料、机上娱乐、地面服务、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 )
结果的输出应该是table形式:
列:旅行者类型、座位类型、航线、飞行日期、座位舒适度....带有星级
行 : 每条评论
这有点复杂,因为您需要将 filled/unfilled 颗星制成表格以获得每个字段的评分。我会使用 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)
这会为您提供一个列表,每个评论都有一个 table。这些应该很容易组合成一个数据框。