Скрапинг годовой дивидендной доходности с помощью rvest

Как вы, наверное, слышали, getDividends больше не работает с Yahoo в качестве источника.

Итак, я пытаюсь получить данные о дивидендах, соскребая их с веб-страницы. В частности, я пытаюсь получить доходность на конец 2016 года (2,37) для MSFT по ссылке http://performance.morningstar.com/stock/performance-return.action?p=dividend_split_page&t=MSFT®ion=usa&culture=en-US

Я установил SelectorGadget и попытался использовать rvest, чтобы выполнить свою работу. Не использовав его раньше, я попытался следовать инструкциям, и я думаю, что tr:nth-child(4) td:nth-child(6) - это информация, которая мне нужна от SelectorGadget для передачи в rvest, но здесь я застрял. Буду признателен за любую помощь, указывающую, как это сделать.

Это то, что я пробовал:

website<-read_html('http://performance.morningstar.com/stock/performance-return.action?p=dividend_split_page&t=MSFT&region=usa&culture=en-US')
website%>%html_nodes('tr:nth-child(4) td:nth-child(6)')%>%html_text()

Но вывод:

character(0)

Идеальным выводом кода будет:

2.37

Большое спасибо.


person Oposum    schedule 24.04.2017    source источник
comment
Это не статическая страница — вам придется выполнить динамическую очистку с помощью RSelenium.   -  person MichaelChirico    schedule 25.04.2017
comment
@MichaelChirico, есть ли другой способ? RSelenium, по-видимому, зависит от пары пакетов, которые недоступны для R версии 3.2.3, и обновление R является проблемой — половина моих других внешних пакетов перестанет работать, и потребуется несколько дней, чтобы все исправить.   -  person Oposum    schedule 25.04.2017


Ответы (1)


Этот веб-сайт использует файл XHR для хранения информации. Чтобы скачать историю дивидендов, попробуйте:

url<- 'http://performance.morningstar.com/perform/Performance/stock/annual-dividends.action?&t=XNAS:MSFT&region=usa&culture=en-US&cur=&ops=clear&ndec=2&y=5' 

library(rvest)
#read page
page<-read_html(url)
#find the table and parse it will html_table function
table<-html_node(page, "table")
dividends<-html_table(table)
#remove the blank lines from the final table
dividends[-c(1, 2, 4, 6),]
person Dave2e    schedule 24.04.2017
comment
это работает, но URL-адрес был изменен. Так что, к сожалению, для других акций это не работает. Например, если я попытаюсь заменить MSFT на IBM, это больше не будет работать. (по ссылке ‹performance.morningstar.com/perform/Performance/stock/) - person Oposum; 25.04.2017
comment
Я думаю, что нашел решение, еще больше упростив ссылку до ‹performance.morningstar.com/perform/Performance/stock/›, а затем добавление символа акции работает для любой акции. Есть ли в этом недостаток? - person Oposum; 25.04.2017
comment
В адресе перед символом акции указан код биржи. Например, в этом примере XNAS является врагом Nasdex, а IBM находится на Нью-Йоркской фондовой бирже. - person Dave2e; 25.04.2017