20

このページからデータをダウンロードしたい

データは で簡単にスクレイピングできますrvest

コードは次のようになります。

library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <-     "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

data <- url %>>%
  html() %>>%
  html_nodes(css) %>>%
  html_table() 

しかし、このような Web ページには問題があります。

+すべての国のデータを表示するボタンがありますが、デフォルトでは 50 か国のデータだけです。

このコードを使えば 50 か国のデータをスクレイピングできます。

+ボタンは で作成されているため、ボタンをクリックしてデータをスクレイピングするjavascript方法があるかどうかを知りたいです。R

4

1 に答える 1

14

場合によっては、問題を ajax Web リクエスト レベルで攻撃する方がよい場合もあります。このサイトでは、Chrome の開発ツールを使用してリクエストを監視できます。テーブル (テーブル全体も) を構築するために、POSTさまざまな ajax-y パラメータを使用してサイトにアクセスします。それを複製し、応答のデータを少し変更するだけで、準備完了です。

library(httr)
library(rvest)
library(dplyr)

res <- POST("http://www.tradingeconomics.com/",
            encode="form",
            user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.50 Safari/537.36"),
            add_headers(`Referer`="http://www.tradingeconomics.com/",
                        `X-MicrosoftAjax`="Delta=true"),
            body=list(
              `ctl00$AjaxScriptManager1$ScriptManager1`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$UpdatePanel1|ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
              `__EVENTTARGET`="ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1",
              `srch-term`="",
              `ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$GridView1$ctl01$DropDownListCountry`="top",
              `ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$ParameterContinent`="",
              `__ASYNCPOST`="false"))


res_t <- content(res, as="text")
res_h <- paste0(unlist(strsplit(res_t, "\r\n"))[-1], sep="", collapse="\n")

css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

tab <- html(res_h) %>% 
  html_nodes(css) %>%
  html_table() 

tab[[1]]$COUNTRIESWORLDAMERICAEUROPEASIAAUSTRALIAAFRICA

glimpse(tab[[1]]

もう 1 つの方法は、RSelenium を使用してページに移動し、「+」をクリックして、結果のテーブルをスクレイプすることでした。

于 2015-03-21T18:07:50.030 に答える