2016-10-07 8 views
0

私はrvestを使ってこのサイトで471件すべてを取得しようとしましたが、たびに(リストが展開されているかどうかに関係なく)25件しか得られませんでした。どんな助けもありがとう。ウェブスクラビングwith rvest

library("rvest") 
url <- "http://investmentpolicyhub.unctad.org/ISDS?status=100" 
cases <- url %>% 
read_html() %>% 
html_nodes(xpath='//*[@id="cases-list"]') %>% 
html_table() 
View(cases) 

ありがとうございます。

+3

それはあなたがRSeleniumを使用する必要がありますので、XHRリクエストURLをロードしようとしたときのjavascriptのための追加的な例とWebサーバのチェックをロードするためのXHRリクエストを使用しています。 – hrbrmstr

答えて

4

問題は、テーブルの残りの部分を表示するには「すべて表示」ボタンをクリックする必要があることです。これはrvestではできません。あなたは[ヘッドレス]ブラウザを指示しているのでこのように、RSeleniumを使用してナビゲートするとrvestが

library(RSelenium) 
library(rvest) 

pJS <- phantom() # install PhantomJS if necessary 
remDr <- remoteDriver(browserName = 'phantomjs') 

remDr$open() 
remDr$navigate(url) 

button <- remDr$findElement(using = 'css selector', 'a#loadWholeList') 
button$clickElement() 

Sys.sleep(60) # or just wait a while, or rerun the following bits till they work 

html <- remDr$getPageSource() 

cases <- html[[1]] %>% read_html() %>% 
    html_node('table#cases-list') %>% 
    html_table() 

if(nrow(cases) > 26){ 
    remDr$close() 
    pJS$stop() 
} 

、解析するために、クリックした後のビットは、テーブルが完了した場合に応じて、あなたに25行または471行を与える可能性があり読み込み中。テーブルはかなり大きいので、通常のブラウザと同じように、読み込むにはしばらく時間がかかります。すべてが手に入らない場合は、しばらく待ってからSys.sleepの行をもう一度実行してください。しかし忍耐で

、:

tail(cases[, 1:3]) 
##  No. Year of initiation   Short casename 
## 466 466    1995  Goetz v. Burundi (I) 
## 467 467    1995 Leaf Tobacco v. Albania 
## 468 468    1994 Gruslin v. Malaysia (I) 
## 469 469    1994 Saar Papier v. Poland (I) 
## 470 470    1993    AMT v. Zaire 
## 471 471    1987   AAPL v. Sri Lanka 
+0

Alistaire、ありがとうございました。それは素晴らしいですが、私はしばらくしてphantomjsを動かすために時間がかかりました、そして、私は "if(nrow(cases)> 26)"の中の26を "471"の中に置き換えなければならないことに気づきました:)).. – user6934711

+0

' remDr $ close() 'と' pJS $ stop() 'はリモートドライバとPhantomJSをシャットダウンします。条件付きでラップされているため、適切なデータがない限り実行されません。条件を471に変更する場合は、それを '> ='に変更するか、決してそれらをシャットダウンしないでください。 – alistaire

関連する問題