3

特定のアイコンが存在する html テーブルのセルを通知できるコードを探しています。これが私が取り組んでいるものです:

u <- "http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1"
doc <- rvest::html(u)
tab <- rvest::html_table(doc, fill = TRUE)[[6]]

コラム「Pos.」フィールド内のプレーヤーの位置を指定します。これらのいくつかには、追加のアイコンがあります。次のように、ページにこれらのアイコンが存在することを確認できます。

rvest::html_nodes(doc, ".kapitaenicon-table")

しかし、これは彼らがどこにいるかを教えてくれません。テーブルの「Pos. column」の行 2、10、11、27 にアイコンがあることをコードで返すようにしたいと思います。どうやってやるの?

4

1 に答える 1

4

もう少しするrvestと、XPath マジックでインデックスを取得できます。

library(rvest)
library(magrittr)
library(XML)

pg <- html("http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1")

pg %>% 
  html_nodes("table") %>% 
  extract2(6) %>% 
  html_nodes("tbody > tr") %>% 
  sapply(function(x) {
    length(xpathSApply(x, "./td[8]/span[@class='kapitaenicon-table icons_sprite']")) == 1
  }) %>% which

## [1]  2 10 11 27

これにより、6 番目のテーブルが取得され、s が抽出され、適切な/が含まtrれる 8 番目のテーブルが検索されます。XPath 検索が失敗した場合、空のリストが返されるため、長さを使用して、アイコンが含まれる行と含まれない行を判別できます。tdspanclasstd

これ:

pg %>% 
  html_nodes(xpath="//table[6]/tbody/tr/td[8]") %>% 
  xmlSApply(xpathApply, "boolean(./span[@class='kapitaenicon-table icons_sprite'])") %>% 
  which

も機能し、少しきつい(そして速い)。XPathboolean操作を使用して存在をテストします。これは、ノードで他に実行する操作がない場合に便利です。

これはxml2バージョンですが、これを行うにはもっと良い方法があるはずだと私は信じていますxml2:

library(xml2)
library(magrittr)

pg2 <- read_html("http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1")
pg2 %>% 
  xml_find_all("//table[6]/tbody/tr/td[8]") %>% 
  as_list %>% 
  sapply(function(x) {
    inherits(try(xml_find_one(x, "./span"), silent=TRUE), "xml_node")
  }) %>% which

アップデート

のバージョン0.1.0.9000xml2は、次のことを行う必要がありました。

pg2 %>% xml_find_all("//table") %>% 
  as_list %>% 
  extract2(6) %>% 
  xml_find_all("./tbody/tr/td[8]") %>% 
  as_list %>% 
  sapply(function(x) {
    inherits(try(xml_find_one(x, "./span"), silent=TRUE), "xml_node")
  }) %>% which

そんなはずはないので、バグレポートを提出しました。

Session info -------------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.0 (2015-04-16)
 system   x86_64, darwin13.4.0        
 ui       RStudio (0.99.441)          
 language (EN)                        
 collate  en_US.UTF-8                 
 tz       America/New_York            

Packages -----------------------------------------------------------------------------
 package    * version date       source        
 curl       * 0.5     2015-02-01 CRAN (R 3.2.0)
 devtools   * 1.7.0   2015-01-17 CRAN (R 3.2.0)
 magrittr     1.5     2014-11-22 CRAN (R 3.2.0)
 Rcpp       * 0.11.5  2015-03-06 CRAN (R 3.2.0)
 rstudioapi * 0.3.1   2015-04-07 CRAN (R 3.2.0)
 xml2         0.1.0   2015-04-20 CRAN (R 3.2.0)
于 2015-05-31T13:45:31.230 に答える