У меня есть установка RSelenium
(использование селена не должно повлиять на ответ на этот вопрос):
library(tidyverse)
library(rvest)
library(httr)
library(RSelenium) # running through docker
## RSelenium setup
remDr <- remoteDriver(port = 4445L, browserName = "chrome")
remDr$open()
## Navigate to Google Books
remDr$navigate("https://books.google.com/")
books <- remDr$findElement(using = "css", "[name = 'q']")
## Search for whatever, the Civil War, for example
books$sendKeysToElement(list("the civil war", key = "enter"))
## Getting Google web elements (10 per page)
bookElem <- remDr$findElements(using = "xpath", "//h3[@class = 'LC20lb']//parent::a")
## Click on each book link
links <- sapply(bookElem, function(bookElem){
bookElem$getElementAttribute("href")
})
Это прекрасно работает - и компилирует все ссылки с первой страницы результатов (Google автоматически ограничивает его 10 результатами, то есть десятью ссылками). Я хотел бы, чтобы этот же links
вектор компилировал каждую результирующую ссылку, скажем, с 12 страниц (чтобы она была управляемой). Итак:
goog_pgs <- seq(1:12) # to set the limit
Где я потерялся: как мне вставить это в мой links
вектор? Ссылки на каждой странице слишком разные и не настолько просты, чтобы просто указывать номер до конца. Я попытался вставить следующее:
nextButton <- remDr$findElements("xpath", "//*[@id = 'pnnext']")
next_page <- sapply(nextButton, function(nextButton) {
next_elements$clickElement()
})
И это не работает. Какое здесь решение?