WebScraping динамических страниц в R

Я изменю сайт, чтобы сделать этот вопрос лучше. Все еще сталкиваюсь с похожими проблемами, которые не могут использовать только пакет rvest, и, возможно, ответ будет легче получить с помощью RSelenium. Сайт: http://ravimaailma.fi/cg/tulokset/20/ и я хочу чтобы получить ссылки из основной статьи, которые направят меня к результатам отдельных гонок. Ссылки выглядят примерно так: http://ravimaailma.fi/article/tulokset/pori-18-11-2017-tulokset/8718/

Я пытаюсь использовать простой Rvest, поскольку думал, что здесь все, что нужно. SelectorGadget дает ссылкам CSS как .article-title a, поэтому мой код просто

url %>%
  read_html() %>% 
  html_nodes(".article-title a") %>% 
  html_text()

Это ничего не вернет. Веб-сайт загружает больше результатов при прокрутке вниз, но я думал, что по крайней мере получу первые результаты. Ниже приведены некоторые ссылки, и ссылки 28:32 выглядят многообещающе, но я думаю, что это ссылки с боковой панели, а не из статьи.

url %>%
  read_html() %>% 
  html_nodes("a") %>% 
  html_attr("href")

Что я здесь делаю неправильно, и может ли RSelenium мне помочь?


person Hakki    schedule 09.08.2017    source источник
comment
Насколько я знаю, для динамических страниц вам нужно RSelenium. Я сам недавно начал, и эти два руководства очень помогли, если вы их не видели.   -  person Val    schedule 09.08.2017
comment
Спасибо, я прошел через это, но по какой-то причине не смог подключиться. Пройду еще раз и посмотрю, не пропустил ли я что-то. Я думаю, что докер не установлен правильно.   -  person Hakki    schedule 09.08.2017
comment
Убедитесь, что docker run hello-world выполняется правильно. Если это так, запустите образ selenium по вашему выбору (мой был Firefox) с отладкой, чтобы вы могли просмотреть его через VNC. При установке соединения не забудьте указать браузер, который вы собираетесь использовать.   -  person Val    schedule 09.08.2017


Ответы (2)


Вот мой частичный ответ, еще не все понял, но, возможно, кому-то поможет. Код вернет 1 ссылку для первого результата. Не уверен, почему он не дает им все. я использую

library(RSelenium)
rD <- rsDriver(port = 4444L,  browser = "chrome")

remDr <- rD[["client"]]
remDr$navigate("http://ravimaailma.fi/cg/tulokset/20/")

elem <- remDr$findElement(using="css selector", value=".article-title a")
elemtxt <- elem$getElementAttribute("href")

#Click button to load more results
#button <- remDr$findElement(using="id", value="loadmore")
#button$clickElement()

remDr$close()

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

person Hakki    schedule 19.11.2017

[Мне (пока) не разрешено писать комментарии, поэтому я решил сделать этот пост ответом] RSelenium не всегда необходим, вы также можете взаимодействовать с веб-сайтом напрямую с помощью PhantomJS (см., например, этот пример).

Если вы предоставили пример с веб-сайта вместо локальной ссылки на .pdf, я могу попытаться выяснить, как получить данные.

person TomS    schedule 15.09.2017
comment
biathlonresults.com — это сайт, содержащий все данные о результатах. Это довольно странный сайт, так как вам нужно нажимать и исследовать, чтобы найти что-то. Не уверены, что это то, что вы ищете? - person Hakki; 18.09.2017
comment
Вероятно, проще начать с более конкретной части данных, чем я хочу получить весь веб-сайт, поскольку для каждой страницы может потребоваться отдельный код. Примером может служить 2016/2017 -› данные результатов -›BMW IBU [...] -› 2x6 + [...] смешанная эстафета -› первые 3 страны - person TomS; 18.09.2017
comment
о, хорошо, так как я не мог точно определить веб-сайт, поскольку адрес не изменится, когда вы нажмете на этот результат. Примеры данных: biathlonresults.com – 2016/2017 – 25 ноября — 4 декабря, Эстерсунд – Индивидуальная гонка, 20 км, мужчины – > Результат - person Hakki; 19.09.2017
comment
Я пробовал пару вещей за последние дни, но для моих ограниченных знаний веб-сайт кажется слишком интерактивным для меня, чтобы предоставить рабочее решение. Мне жаль! Я надеюсь, что найдется пользователь SO, который увидит этот вопрос и сможет направить вас в правильном направлении. - person TomS; 25.09.2017
comment
Я изменил рассматриваемый веб-сайт, так как, возможно, раньше он был слишком интерактивным. Будет ли это более подходящим сайтом? - person Hakki; 18.11.2017