使用R在多个页面上进行Web抓取

时间:2017-06-27 06:33:10

标签: r web-scraping

我正在尝试使用R中的以下网址抓取产品的评论。当我运行以下代码时,我可以抓取一个评论。

comment<- read_html("https://www.influenster.com/reviews/chobani-greek-yogurt")
comment %>% html_node(".content-item-text") %>% html_text()
comment %>% html_node(".date") %>% html_text()

但是,当我使用下面的代码在多个页面上抓取多个注释时,它返回NULL。

reviews <- lapply(paste0('https://www.influenster.com/reviews/chobani-greek-yogurt?review_page=2', 2:50),
                function(url){
                    url %>% read_html() %>% 
                    html_nodes(".content-item-text review-text") %>% 
                    html_nodes(".date") %>% 
                    html_text()
                  })

1 个答案:

答案 0 :(得分:0)

以下代码是否实现了您的目标?

comment<- read_html("https://www.influenster.com/reviews/chobani-greek-yogurt")

reviews <- c()
dates <- c()

for(i in 1:10){
  reviews <-  c(reviews,
                comment %>%
                html_node(paste0(".review-item:nth-child(", i, ") .review-text")) %>%
                html_text())
  dates <- c(dates,
             comment %>%
             html_node(paste0(".review-item:nth-child(", i, ") .date")) %>%
             html_text())
}

for(j in 2:50){
  comment <- read_html(paste0("https://www.influenster.com/reviews/chobani-greek-yogurt?review_page=", j))
  for(i in 1:10){
    reviews <-  c(reviews,
                  comment %>%
                  html_node(paste0(".review-item:nth-child(", i, ") .review-text")) %>%
                  html_text())
    dates <- c(dates,
               comment %>%
               html_node(paste0(".review-item:nth-child(", i, ") .date")) %>%
               html_text())
  }
}

请注意我在英国,提取的日期似乎得到纠正( - 网站上说明的6小时)

此外,为多重循环道歉我还没有很快将循环转换为apply函数:)