我想提取亞馬遜上一個產品的評論,評論的url放在同一個url上,但頁碼不同,手動運行這個腳本是有效的,但我需要手動改變url中的頁碼和tibble的名稱,每次運行得到一個不同的tibble。
由于近70頁的內容相當枯燥,我試圖做一個for回圈來做同樣的事情,在我試圖做的回圈下,但它給了我一個錯誤
。MANUAL
```
library(tidyr)
library(rvest)
url_reviews <- "https://www.amazon.it/Philips-HD9260-90-Airfryer-plastica/product-reviews/B07WTHVQZH/ref=cm_cr_getr_d_paging_btm_next_16?ie=UTF8&reviewerType=all_reviews& pageNumber=16"
doc <- read_html(url_reviews) # 將結果分配給`doc`。
# 評論標題
doc %>%
html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']" ) %>%
html_text() -> review_title
# 審查文本
doc %>%
html_nodes("[class='a-size-base review-text review-text-content']" ) %>%
html_text() -> review_text
# 評論中的星星數量
doc %>%
html_nodes("[data-hook='review-star-rating']" ) %>%
html_text() -> review_star
# 回傳一個tibble
page_16<-data.frame(review_title,
review_text,
review_star,
page =16)
FOR LOOP
```
range <- 12:82
url_max <- paste0("https://www.amazon. it/Philips-HD9260-90-Airfryer-plastica/product-reviews/B07WTHVQZH/ref=cm_cr_getr_d_paging_btm_next_"。 range ," ? ie=UTF8&reviewerType=all_reviews&pageNumber=",range)
for (i in 1。 length(url_max)) {>
doc < - read_html(url_max[i]) # 將結果分配給`doc`。
# Review Title
doc%>%
html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']") %>%
html_text() -> review_title
# Review Text
doc%>%
html_nodes("[class='a-size-base review-text review-text-content']") %>%
html_text() -> review_text
# 評論中的星星數量。
doc %>%
html_nodes("[data-hook='review-star-rating']") %>%
html_text() -> review_star
paste0("page_", range)< -tibble(review_title,)
review_text,/span>
review_star,
page = paste0("a", i))
}
```
uj5u.com熱心網友回復:
這里有另一個替代方案,它定義了一個函式,然后使用lapply()來依次運行該函式。
然而,以下內容可能有助于根據需要對不同的產品進行重復操作。該函式接受兩個引數,第一個i是頁碼,第二個product是你正在收集評論的產品。該函式通過粘貼適當的頁碼來構建URL。
雖然我使用了lapply(),但下面的函式也可以插入到Ronak答案中的map_df()函式中(而且可能比系結行更快)。
library(dplyr)
library(rvest)
library(stringr)
retrieve_reviews < - function(i, product) {>
urlstr <- "https://www.amazon.it/product-reviews/${product}/ref=cm_cr_getr_d_paging_btm_next_${i}?ie=UTF8& reviewerType=all_reviews& pageNumber=${i}"
url < - str_interp(/span>urlstr, list(product = product。 i = i))
doc <- read_html(url) # Assign results to `doc`
# Review Title
doc%>%
html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']") %>%
html_text() -> review_title
# Review Text
doc%>%
html_nodes("[class='a-size-base review-text review-text-content']") %>%
html_text() -> review_text
# 評論中的星星數量。
doc %>%
html_nodes("[data-hook='review-star-rating']") %>%
html_text() -> review_star
return(tibble()
title = review_title,
文本 = review_text,
明星 = review_star,
page = paste0("a", i)
))
}
范圍 <- 12:82
產品 <- "B07WTHVQZH"
評論 < - lapply(range。 retrieve_reviews, product) %> %
bind_rows()
uj5u.com熱心網友回復:
你可以使用map_df從purrr來使用回圈。
library(rvest)
page_numbers <- 12:82
purrr::map_df(page_numbers, ~{>)
url_reviews <- paste0("https://www.amazon. it/Philips-HD9260-90-Airfryer-plastica/product-reviews/B07WTHVQZH/ref=cm_cr_getr_d_paging_btm_next_16?ie=UTF8&reviewerType=all_reviews&pageNumber=", .x)
doc <- read_html(url_reviews) # Assign results to `doc`
# Review Title
doc%>%
html_nodes("[class='a-size-base a-link-normal review-title a-color-base review-title-content a-text-bold']") %>%
html_text() -> review_title
# Review Text
doc%>%
html_nodes("[class='a-size-base review-text review-text-content']") %>%
html_text() -> review_text
# 評論中的星星數量。
doc %>%
html_nodes("[data-hook='review-star-rating']") %>%
html_text() -> review_star
# 回傳一個tibble。
data.frame(review_title,)
review_text,/span>
review_star,
page =.x)
}) -> result
結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312339.html
標籤:
