为什么RVest闭环循环时会拉空数据?

时间:2019-03-30 03:36:52

标签: r rvest

我正试图从Tripadvisor刮刮某家酒店的酒店评论。我正在使用Rvest来实现我的目标。该脚本必须抓取多个页面。

在执行我的脚本时,rvest在循环执行时有时会返回带有空值的向量。这是完全随机的。有人对此有解决办法吗?

我尝试手动遍历脚本。当我慢慢走下坡路时,它通常可以正常工作,但有时仍然可以拉空数据。

# Webscrapen
df <- data.frame()
x = 0

for(i in 1:250){
  url <- paste("https://www.tripadvisor.com/Hotel_Review-g295424-d7760386-Reviews-or",x,"-Hyatt_Regency_Dubai_Creek_Heights-Dubai_Emirate_of_Dubai.html", sep = "")
  x = x + 5

  reviews <- url %>%
    read_html() %>%
    html_nodes('.common-text-ReadMore__content--2X4LR') %>%
    html_node('.hotels-hotel-review-community-content-review-list-parts-ExpandableReview__reviewText--2OVqJ span') %>%
    html_text()

  rating <- url %>%
    read_html() %>%
    html_nodes(".hotels-hotel-review-community-content-review-list-parts-RatingLine__bubbles--3d2Be span") %>%
    html_attr("class")

  rating <- sapply(strsplit(rating, "_"), `[`, 4) %>% 
    as.numeric()

  if(nrow(df) == 0){
    df <- data.frame(reviews[!is.na(reviews)], rating, stringsAsFactors = F)
  } else {
    temp <- df
    df <- rbind(temp, data.frame(reviews[!is.na(reviews)], rating, stringsAsFactors = F))
  }
}

我希望刮掉所有评论,直到我的for循环停止为止。我的数据框至少应包含100条评论。

1 个答案:

答案 0 :(得分:0)

我找到了一种解决方法,将评论放置在重复循环中,并在没有填充矢量的情况下保持重复。

代码需要花费更长的时间才能执行,但可以完成工作。

  repeat{
    Review <- url %>%
      read_html() %>%
      html_nodes('.common-text-ReadMore__content--2X4LR') %>%
      html_node('.hotels-hotel-review-community-content-review-list-parts-ExpandableReview__reviewText--2OVqJ span') %>%
      html_text()
    if(length(Review) >= 1 ){
      break;
    }
  }