3

タイトルが示すように、特定のページで属性を見つけることができない場合、パッケージのhtml_text()関数が値を保存できるかどうかに興味があります。rvestNA

私は現在、199 ページ以上のスクレイプを実行しています (これは正常に動作します。すでにいくつかの変数でテスト済みです)。

現在、199 ページの一部 (136) にのみ存在する値を検索すると、html_text()136 文字列のベクトルのみが返されます。NAs がないと、問題の変数を含むページを特定できないため、これは役に立ちません。

は入力html_atts()を受け取ることができますが、 ではありません。任意のヒント?defaulthtml_text()

どうもありがとう!

4

2 に答える 2

6

エラー処理をラップする新しい関数を作成すると、%>%パイプがきれいに保たれ、将来の自分や他の人のために理解しやすくなります。

library(rvest)

html_text_na <- function(x, ...) {

  txt <- try(html_text(x, ...))
  if (inherits(txt, "try-error") |
      (length(txt)==0)) { return(NA) }
  return(txt)

}

base_url <- "http://www.saem.org/membership/services/residency-directory?RecordID=%d"

record_id <- c(1291, 1000, 1166, 1232, 999)

sapply(record_id, function(i) {

  html(sprintf(base_url, i)) %>% 
    html_nodes("#drpict tr:nth-child(6) .text") %>%
    html_text_na %>%
    as.numeric()

})

## [1]  8 NA 10 27 NA

また、sapplyのベクトルに対して をrecord_id実行すると、抽出しようとしている値のベクトルが自動的に返されます。

于 2015-06-09T02:31:50.567 に答える
2

理解した。

ループに 1 行のロジックを追加する必要がありました。

機能したコードの一部を次に示します。

for(i in record_id) {
  site <- paste("http://www.saem.org/membership/services/residency-directory?RecordID=", i, sep="")
  site <- html(site)
  this_data <- site %>%
                html_nodes("#drpict tr:nth-child(6) .text") %>%
                html_text() %>%
                as.numeric()
  if(length(this_data) == 0) {
    this_data <- NA
  }
  all_data <- c(all_data, this_data)
}

とにかくみんな(そして@hrbrmstr)に感謝します!:)

于 2015-06-09T01:29:09.203 に答える