RSelenium выскабливание возвращает странные результаты - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь почистить страницы поиска некоторых источников новостей с помощью RSelenium. Вот мой код:

library(rvest)
library(RSelenium)

#open the browser
rD <- rsDriver(browser=c("chrome"), chromever="73.0.3683.68")
remDr <- rD[["client"]]

#create a blank space to put the links
urlslist_final = list()

##loop through the page number at the end until done with ~1000 / 20 = 50
for (i in 1:2) { ##change this to 50

  url = paste0('https://www.npr.org/search?query=kavanaugh&page=', i)

  #navigate to it
  remDr$navigate(url)

  #get the links
  webElems <- remDr$findElements(using = "css", "[href]")
  urlslist_final[[i]] = unlist(sapply(webElems, function(x) {x$getElementAttribute("href")}))

  #don't go too fast
  Sys.sleep(runif(1, 1, 5))

} #close the loop

remDr$close()
# stop the selenium server
rD[["server"]]$stop()

Если я установлю i = 1 и щелкну в браузере после перехода на страницу, то получу желаемый результат из 166 ссылок с конкретными ссылками на результаты, которые я пытаюсь очистить:

> str(urlslist_final)
List of 1
 $ : chr [1:166] "https://media.npr.org/templates/favicon/favicon-180x180.png" "https://media.npr.org/templates/favicon/favicon-96x96.png" "https://media.npr.org/templates/favicon/favicon-32x32.png" "https://media.npr.org/templates/favicon/favicon-16x16.png" ...

Однако, если просто запустить мой цикл, я получу только 91 результат, и ни один из них не является фактическим результатом поиска:

> str(urlslist_final)
List of 2
$ : chr [1:91] "https://media.npr.org/templates/favicon/favicon-180x180.png" "https://media.npr.org/templates/favicon/favicon-96x96.png" "https://media.npr.org/templates/favicon/favicon-32x32.png" "https://media.npr.org/templates/favicon/favicon-16x16.png" ...

Любая помощь в понимании, почему здесь разница? Что я могу сделать по-другому? Я попытался просто использовать rvest, но не смог найти ссылки, встроенные в их скрипт для результатов.

1 Ответ

0 голосов
/ 19 марта 2019

Спасибо моему другу Тому, вот хорошее решение:

#scroll on the page
webscroll <- remDr$findElement("css", "body")
webscroll$sendKeysToElement(list(key = "end"))

Я поместил этот код между переходом на страницу и захватом ссылок, что привело к тому, что веб-сайт подумал, что я правильно его использую, чтобы я мог очистить ссылки.

...