2017-09-19 10 views
0

ダイナミックウェブサイトMorningstar.comをXHRリクエストでスクラップしようとしています。Web Scraping XHR rvestとRのダイナミックページ

私はスクレーピングしています正確なサイトがある:http://performance.morningstar.com/funds/etf/total-returns.action?t=SPY&region=USA&culture=en_US

私はこすりしようとしている何が四半期ごとのパフォーマンスの数(1ヶ月)です。今日の結果は0.64です。

try(res <- GET(url = "http://performance.morningstar.com/fund/performance-return.action", 
       query = list(
        t="SPY", 
        region="usa", 
        culture="en-US" 
       ) 
)) 

    tryCatch(x <- content(res) %>% 
      html_nodes(xpath = '//*[@id="tab-quar-end-content"]/table/tbody/tr[1]/td[1]') %>% 
      html_text() %>% 
      trimws() %>% 
      as.numeric() 
      , error = function(e) x <-NA) 

しかし、結果は数値(0)

私が間違っているの何任意のアイデア?

Sody

更新:

私は次のコードでHTMLデータを取得することができた:

try(res <- GET(url = "http://performance.morningstar.com/fund/performance-return.action", 
       query = list(

        t = "SPY", 
        region = "usa", 
        culture = "en-US", 
        ops = "clear", 
        s = "0P0000J533", 
        ndec = "2", 
        ep = "true", 
        align = "q", 
        annlz = "true", 
        comparisonRemove = "false" 

       ) 
)) 

しかし、私はまだのいずれかを使用してデータを指し示す問題を抱えていますCSSセレクタまたはxpath(rvest付き)。

あなたはそれらのデータポイントを見つけるために何を使用しますか? SelectorGadgetはまだ動いていますか?

乾杯、アーロン

+0

質問の更新と投稿の回答の更新を検討する必要があります。 – hrbrmstr

+0

良い点!これは初めてです。 –

答えて

1
library(httr) 

GET(
    url = "http://performance.morningstar.com/perform/Performance/cef/trailing-total-returns.action", 
    add_headers(
    Referer = "http://performance.morningstar.com/funds/etf/total-returns.action?t=SPY&region=USA&culture=en_US", 
    `X-Requested-With` = "XMLHttpRequest" 
), 
    query = list(
    t = "ARCX:SPY", region = "usa", culture = "en-US", 
    cur = "", ops = "clear", s = "0P00001MK8", ndec = "2", ep = "true", 
    align = "q", annlz = "true", comparisonRemove = "false", 
    benchmarkSecId = "", benchmarktype = "" 
), 
    verbose() 
) -> res 

XHRを直接ターゲティングする必要があります。

+0

xpathはどうですか?xpath = '/ * [@ id = "tab-quar-end-content"]/table'' –

+0

それはあなたにテーブルを取得します。あなたはデータに慣れるだけの問題を抱えていました。テーブルは簡単な部分です。 – hrbrmstr

0

テーブルはJavaスクリプトを使用して埋め込まれ、ハードコーディングされていません。このデータをスクラップすることはできません。

+0

さて、httrのGETではないかもしれませんが、Rseleniumのようなソリューションはjavascriptの実行が必要なページを掻き集めるために存在しますので、このタイプのデータを掻き取ることは不可能ではありません。 – MrFlick

+0

私はXHRとdevtoolsをchromeで使ってこれに似たサイトからスクラップを作成しています。私はRseleniomが必要とは思わない。 –

関連する問題