我正在使用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不会更改,因此基本上没有要刮取的第二,第三...页面。谁能提出解决此问题的建议,以便我可以通过运行我创建的功能来抓取所有评论数据?
答案 0 :(得分:0)
以下是使用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"))
}