1

ウィキペディア内のオリンピック 2012 のメダル テーブルを取得しようとしています。

library(rvest) 
library(magrittr)
url <- "https://en.wikipedia.org/wiki/United_States_at_the_2012_Summer_Olympics" 

    xpath0 <- '//*[@id="mw-content-text"]/table[1]'
    xpath1 <- '//*[@id="mw-content-text"]/table[2]'
    xpath2 <- '//*[@id="mw-content-text"]/table[2]/tbody/tr/td[1]'
    xpath3 <- '//*[@id="mw-content-text"]/table[2]/tbody/tr/td[1]/table'

    tb <- url %>%
      html() %>%
      html_nodes(xpath=xpath0) %>%
      html_nodes("") %>%
      html_table()

xpath0 または xpath1 がエラーを返す

Error in parse_simple_selector(stream) : 
  Expected selector, got <EOF at 1>

xpath2 と xpath3 は空のリストを返します。

同時に、正確な要素を指すためにSelectorgadget ( https://cran.r-project.org/web/packages/rvest/vignettes/selectorgadget.html ) を使用しようとしました。私は得た

//td[(((count(前の兄弟:: ) + 1) = 1) と親:: )] | //*[contains(concat( " ", @class, " " ), concat( " ", "headerSortDown", " " ))]

そしてエラー

parse_simple_selector(stream) のエラー: 予想されるセレクター、取得しました

どんな助けでも本当に感謝しています。

ジョア

4

1 に答える 1

1

名前を持つ最初のテーブルは複雑な構造をしており、標準形式に変換するのは非常に難しいようです。少なくとも私は成功しませんでした。

スポーツ別のメダル数と総メダル数のまとめは、

library(rvest) #v.0.2.0.9000
url <- "https://en.wikipedia.org/wiki/United_States_at_the_2012_Summer_Olympics" 
tb <- read_html(url) %>% html_node("table.wikitable:nth-child(2)") %>% html_table(fill=TRUE)
#> head(tb)
#   Medals by sport   NA   NA   NA    NA NA NA
#1            Sport 01 ! 02 ! 03 ! Total NA NA
#2         Swimming   16    9    6    31 NA NA
#3    Track & field    9   12    7    28 NA NA
#4       Gymnastics    3    1    2     6 NA NA
#5         Shooting    3    0    1     4 NA NA
#6           Tennis    3    0    1     4 NA NA

次に、取得できるすべての競合他社を要約した別の表があります

tb2 <- read_html(url) %>% html_node("table.wikitable:nth-child(20)") %>% html_table()
#> head(tb2)
#                        Sport Men Women Total
#1                     Archery   3     3     6
#2 Athletics (track and field)  63    62   125
#3                   Badminton   2     1     3
#4                  Basketball  12    12    24
#5                      Boxing   9     3    12
#6                    Canoeing   5     2     7

そして、これは複数のメダリストの表です:

tb3 <- read_html(url) %>%  html_node("table.wikitable:nth-child(8)") %>% html_table(fill=TRUE)
#> head(tb3)
#  Multiple medalists            NA   NA   NA   NA    NA NA
#1               Name         Sport 01 ! 02 ! 03 ! Total NA
#2     Michael Phelps      Swimming    4    2    0     6 NA
#3     Missy Franklin      Swimming    4    0    1     5 NA
#4    Allison Schmitt      Swimming    3    1    1     5 NA
#5        Ryan Lochte      Swimming    2    2    1     5 NA
#6      Allyson Felix Track & field    3    0    0     3 NA

@Metrics で指摘されているように、必要なテーブルによって異なります。そのページには多くのテーブルがあります。

于 2015-07-26T19:51:30.930 に答える