2017-12-04 9 views
0
library(XML) 
library(RCurl) 
library(rlist) 
theurl <- getURL("http://legacy.baseballprospectus.com/sortable/index.php?cid=2022181",.opts = list(ssl.verifypeer = FALSE)) 
tables <- readHTMLTable(theurl) 

私は上記のWebページから2016テーブルのデータをスクラップしようとしています。 Yearを2010に変更すると、URLはhttp://legacy.baseballprospectus.com/sortable/index.php?cid=1966487に変更されます。R:ウェブスクレイピングでhtmlページ選択を切り替える方法

異なるYearのテーブルを取得できるようにアルゴリズムを自動化したいのですが、各ページの一意の識別子(例:)を自動的に取得する方法がわかりません。これらのリストを見つける方法はありますか?

私はhtmlソースコードを見てみましたが、運はありませんでした。

答えて

2

rvestを使用すると、フォームに値を設定して送信できます。反復するpurrr::map_dfrで包み、データフレームの中の行結合する結果、

library(rvest) 

sess <- html_session("http://legacy.baseballprospectus.com/sortable/index.php?cid=2022181") 

baseball <- purrr::map_dfr(
    2017:2015, 
    function(y){ 
     Sys.sleep(10 + runif(1)) # be polite 

     form <- sess %>% 
      html_node(xpath = '//form[@action="index.php"]') %>% 
      html_form() %>% 
      set_values(year = y) 

     sess <- submit_form(sess, form) 

     sess %>% 
      read_html() %>% 
      html_node('#TTdata') %>% 
      html_table(header = TRUE) 
    } 
) 

tibble::as_data_frame(baseball) # for printing 
#> # A tibble: 4,036 x 38 
#>  `#`    NAME TEAM LG YEAR AGE  G PA AB  R 
#> <dbl>    <chr> <chr> <chr> <int> <int> <int> <int> <int> <int> 
#> 1  1 Giancarlo Stanton MIA NL 2017 27 159 692 597 123 
#> 2  2  Joey Votto CIN NL 2017 33 162 707 559 106 
#> 3  3 Charlie Blackmon COL NL 2017 30 159 725 644 137 
#> 4  4  Aaron Judge NYA AL 2017 25 155 678 542 128 
#> 5  5  Nolan Arenado COL NL 2017 26 159 680 606 100 
#> 6  6  Kris Bryant CHN NL 2017 25 151 665 549 111 
#> 7  7  Mike Trout ANA AL 2017 25 114 507 402 92 
#> 8  8  Jose Altuve HOU AL 2017 27 153 662 590 112 
#> 9  9 Paul Goldschmidt ARI NL 2017 29 155 665 558 117 
#> 10 10  Jose Ramirez CLE AL 2017 24 152 645 585 107 
#> # ... with 4,026 more rows, and 28 more variables: H <int>, `1B` <int>, 
#> # `2B` <int>, `3B` <int>, HR <int>, TB <int>, BB <int>, IBB <int>, 
#> # SO <int>, HBP <int>, SF <int>, SH <int>, RBI <int>, DP <int>, 
#> # NETDP <dbl>, SB <int>, CS <int>, AVG <dbl>, OBP <dbl>, SLG <dbl>, 
#> # OPS <dbl>, ISO <dbl>, BPF <int>, oppOPS <dbl>, TAv <dbl>, VORP <dbl>, 
#> # FRAA <dbl>, BWARP <dbl> 
関連する問題