Скребковый веб-сайт, содержащий код JS/jquery с R

92
12

Я хочу извлечь гиперссылки с этого сайта с помощью разных поисков (не бойтесь, что это на датском языке). Гиперссылки можно найти справа (v15, v14, v13 и т.д.) [ Пример ]. Веб-сайт, который я пытаюсь очистить, каким-то образом использует результаты поиска из какого-то jquery/javascript. Это основано на моих очень ограниченных знаниях в HTML и может быть неправильным.

Я думаю, что этот факт не позволяет выполнить следующий код (я использую "rvest" -package):

sdslink="http://karakterstatistik.stads.ku.dk/#searchText=&term=&block=&institute=null&faculty=&searchingCourses=true&page=1"
s_link = recs %>%
read_html(encoding = "UTF-8") %>%
html_nodes("#searchResults a") %>%
html_attr("href")

Я нашел метод, который работает, но он требует, чтобы я загружал страницы вручную с помощью "правого клика" + "сохранить как" для каждой страницы. Это, однако, неосуществимо, поскольку я хочу очистить в общей сложности 100 страниц для гиперссылок.

Я попытался использовать пакет jsonlite в сочетании с httr, но я не могу найти правильный.json файл.

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

спросил(а) 2016-08-16T14:26:00+03:00 4 года, 2 месяца назад
1
Решение
71

Один из подходов - использование RSelenium. Вот вам какой-то простой код, чтобы вы начали. Я предполагаю, что у вас уже есть RSelenium и установлен webdriver. Перейдите на интересующий вас сайт:

library(RSelenium)
startServer()
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4444,
browserName = "chrome")
remDr$open(silent = TRUE)
remDr$navigate("http://karakterstatistik.stads.ku.dk/")

Найдите кнопку submit, проверив источник:

webElem <- remDr$findElement("name", "submit")
webElem$clickElement()

Сохраните первые 5 страниц:

html_source <- vector("list", 5)
i <- 1
while (i <= 5) {
html_source[[i]] <- remDr$getPageSource()
webElem <- remDr$findElement("id", "next")
webElem$clickElement()
Sys.sleep(2)
i <- i + 1
}
remDr$close()

ответил(а) 2016-08-16T15:13:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема