用R中的react JS抓取网页[英] Scraping webpage with react JS in R

问题描述


我正在尝试抓取以下页面:https://metro.zakaz.ua/uk/?promotion=1
此页面包含反应内容.
我可以用代码刮第一页:

url="https://metro.zakaz.ua/uk/?promotion=1"

read_html(url)%>%
  html_nodes("script")%>%
  .[[8]] %>% 
  html_text()%>%
  fromJSON()%>%
  .$catalog%>%.$items%>%
  data.frame

结果我有第一页的所有项目,但我不知道如何抓取其他页面.
如果有帮助,请将此 js 代码移至其他页面:

document.querySelectorAll('.catalog-pagination')[0].children[1].children[0].click()

感谢您的帮助!

推荐答案

您将需要 'RSelenum' 来执行无头导航.

查看设置:如何为 R 设置 rselenium?

library(RSelenium)
library(rvest)
library(tidyvers)

url="https://metro.zakaz.ua/uk/?promotion=1"

rD <- rsDriver(port=4444L, browser="chrome")
remDr <- rD[['client']]

remDr$navigate(url)

### adjust items you want to scrape 
    src <- remDr$getPageSource()[[1]]

    pg <- read_html(src)
    tbl <- tibble(
                    product_name = pg %>% html_nodes(".product-card-name") %>% html_text(),
                    product_info = pg %>% html_nodes(".product-card-info") %>% html_text()
                    )

## to handle pagenation (tested with 5 pages) - adjust accordinly
for (i in 2:5) {
    pages <- remDr$findElement(using = 'css selector',str_c(".page:nth-child(",i,")"))

    pages$clickElement()  

    ## wait 5 sec to load
    Sys.sleep(5)

    src <- remDr$getPageSource()[[1]]

        pg <- read_html(src)
        data <- tibble(
                    product_name = pg %>% html_nodes(".product-card-name") %>% html_text(),
                    product_info = pg %>% html_nodes(".product-card-info") %>% html_text()
                    )
        tbl <- tbl %>% bind_rows(data)
}

nrow(tbl)
head(tbl)
tail(tbl)

这是一个快速输出:

输出

本文地址:https://www.itbaoku.cn/post/1739960.html