2016-08-16 2 views
0

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

Я думаю, что этот факт делает следующий код не может работать (я использую «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 работать, автоматизировать решение «сохранить как» или третий более умный путь.

ответ

2

Один из подходов заключается в использовании 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() 
+0

Благодаря кучу для помощи это было ** именно то, что мне нужно **. Пришлось немного взглянуть на Селен, прежде чем я смогу заставить его работать. [Этот ответ] (http://stackoverflow.com/a/31188481/6717092) на другой вопрос был очень полезен, если другие люди испытывают проблемы при установке. – ScrapeGoat

+0

Добро пожаловать. Пожалуйста, отметьте ответ как принятый, если на ваш вопрос был удовлетворен удовлетворительный ответ. –

+0

Сделано и спасибо. У меня довольно быстрый [последующий вопрос] (http://stackoverflow.com/q/38991773/6717092) – ScrapeGoat