0

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 不会改变,因此基本上没有第二、第三……页面可以抓取。谁能提供有关如何解决此问题的建议,以便我可以通过运行我创建的功能来抓取所有评论数据,好吗?

4

1 回答 1

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"))
}
于 2018-07-16T06:41:43.447 回答