2017-02-16 3 views
2

R関数readHTMLTableを使用して、www.racingpost.comのオンラインデータベースからデータを収集しようとしています。私は、個々の馬を識別するために使用できる30,000のユニークIDを持つCSVファイルを持っています。readHTMLTable in R - NULL値をスキップ

エラー(function (classes, fdef, mtable)中:残念ながら、これらのIDの数が少ないがエラーを返すようにreadHTMLTableをリードしている のための継承された方法を見つけることができない機能「readHTMLTable」「『NULL』」

私の質問署名のためにNULL値を返すidsをスキップし、残りのHTMLテーブルを読み続けるラッパー関数を設定することは可能ですか?読み取りは各NULL値で停止します。すべての有効な馬のIDがNULL値を返します0011バーです

ids = c(896119, 766254, 790946, 556341, 62736, 660506, 486791, 580134, 0011, 580134) 

:私がこれまで試してみました何

はこれです。その後、

ただし、最初のNULL値に達したときに関数が停止することを意味するif文でエラーが返されると思います。どんな助けでも大歓迎です - 多くのありがとう。

答えて

2

HTMLテーブルを読み取る前に、まずHTMLを分析して(取得したページを調べ、誤った結果を認識する方法を見つける)ことができます。

しかし、あなたはまた、エラーがそうのように、スローされたときに関数が何も(NA)を返していないことを確認することができます:あなたが行うことができますrvestを使用

library(XML) 

scrapescrape <- function(x) { 

    link <- paste0("http://www.racingpost.com/horses/horse_home.sd?horse_id=",x) 

    tryCatch(readHTMLTable(link, which=2), error=function(e){NA}) 

    } 
} 

ids <- c(896119, 766254, 790946, 556341, 62736, 660506, 486791, 580134, 0011, 580134) 

lst <- lapply(ids, scrapescrape) 

str(lst) 
2

require(rvest) 
require(purrr) 
paste0("http://www.racingpost.com/horses/horse_home.sd?horse_id=", ids) %>% 
    map(possibly(~html_session(.) %>% 
       read_html %>% 
       html_table(fill = TRUE) %>% 
       .[[2]], 
       NULL)) %>% 
    discard(is.null) 

最後の行を破棄すべての「失敗した」試み。あなたがそれらを保持したい場合は、最後の行をドロップする