r语言 - 如何使用rvest自动单击"加载更多"来抓取所有数据



我使用rvest在一个网站上抓取一些感兴趣的信息。示例页面如下https://www.edsurge.com/product-reviews/mr-elmer-product/educator-reviews,我写了一个这样的函数:

PRODUCT_NAME2 <- c()
REVIEW <- c()
USAGE <- c()
DF4 <- data.frame(matrix(ncol=3, nrow=0))
parse_review_page <- function(url) {
product_name2 <- read_html(url) %>%
html_nodes(".mb0 a") %>%
html_text()
review <- read_html(url) %>% 
html_nodes(".review-ratings__text strong") %>%
html_text() 
usage <- read_html(url) %>% 
html_nodes("p:nth-child(3)") %>%
html_text() 

row_num <- length(review)
product_name2 <- rep(product_name2, row_num)
PRODUCT_NAME2 <- c(PRODUCT_NAME2, product_name2)
print(length(PRODUCT_NAME2))
REVIEW <- c(REVIEW, review)
print(length(REVIEW))
USAGE <- c(USAGE, usage)
print(length(USAGE))
current_df2 <- data.frame(PRODUCT_NAME2, REVIEW, USAGE)
DF5 <<- rbind(DF4, current_df2)
return (DF5)
}

我用它把结果放入一个数据帧:

url_to_scrape <- c("https://www.edsurge.com/product-reviews/mr-elmer- 
product/educator-reviews")
DF6 <- url_to_scrape %>% map_dfr(parse_review_page)

但我遇到的问题是,由于有100多条用户评论,网页只能显示30条用户评论。更具挑战性的是,点击页面底部的"加载更多"后,url不会改变,因此基本上没有第二、第三。。。要刮的页面。有人能就如何解决这个问题提出建议吗?这样我就可以通过运行我创建的函数来收集所有的审查数据了?

下面是一个使用http请求读取接下来几页的示例代码:

library(httr)
library(xml2)
library(magrittr)
url <- "https://www.edsurge.com/product-reviews/mr-elmer-product/educator-reviews"
elmer <- GET(url)
xcrsftoken <- read_html(rawToChar(elmer$content)) %>% 
xml_find_first(".//meta[@name='csrf-token']") %>% 
xml_attr("content")
for (n in 1:5) {
resp <- GET(paste0(url, "/feed?page=",n,"&per_page_count=30"), 
add_headers("X-CSRF-Token"=xcrsftoken, "X-Requested-With"="XMLHttpRequest"))
if (status_code(resp)==200) 
write_html(read_html(rawToChar(resp$content)), paste0(n, ".html"))
}

最新更新