2016-05-12 62 views
3

我試着去湊https://en.wikipedia.org/wiki/UEFA_Euro_2012_squads的頁面,並且可以使用rvest刮網址

library(plyr) 
library(XML) 
library(rvest) 
library(dplyr) 
library(magrittr) 
library(data.table) 

for(i in 1:16) 
{ 
float <- paste("squad", i, sep ="") 
print(float) 
html = read_html("https://en.wikipedia.org/wiki/UEFA_Euro_2012_squads") 
assign(float, html_table(html_nodes(html, "table")[[i]])) 
} 

把文本數據從罰款,但也想一個額外的列到這個與每個表中的網址爲俱樂部。例如爲班長1(在頁面上波蘭隊,截斷爲只顯示前5個玩家)

 0#0 Pos.    Player     Date of birth (age) Caps Goals    Club 
1 1 1GK Wojciech Szczęsny (1990-04-18)18 April 1990 (aged 22) 11  0    Arsenal 
2 2 2DF Sebastian Boenisch (1987-02-01)1 February 1987 (aged 25) 9  0  Werder Bremen 
3 3 2DF Grzegorz Wojtkowiak (1984-01-26)26 January 1984 (aged 28) 19  0  Lech Poznań 
4 4 2DF Marcin Kamiński (1992-01-15)15 January 1992 (aged 20) 3  0  Lech Poznań 
5 5 3MF  Dariusz Dudka (1983-12-09)9 December 1983 (aged 28) 65  2    Auxerre 
6 6 3MF  Adam Matuszczyk (1989-02-14)14 February 1989 (aged 23) 20  1 Fortuna Düsseldorf 

我想「俱樂部」爲「clubURL」,將顯示該俱樂部維基百科網址後列。例如,第一位玩家爲阿森納效力,因此拿下阿森納桌上的鏈接並創建:

0#0 Pos.    Player     Date of birth (age) Caps Goals Club 
1 1 1GK Wojciech Szczęsny (1990-04-18)18 April 1990 (aged 22) 11  0 Arsenal 
            clubURL 
1 https://en.wikipedia.org/wiki/Arsenal_F.C. 

等等等等。我發現rvest table scraping including links,但無法讓這個例子工作,也沒有爲我想要做的。很抱歉,如果它在其他地方問,

感謝,

回答

4

我在頁面上使用的第一臺做出了表率。你可以根據需要擴展它。

首先,抓住第一個表並使用html_table進行保存。然後,我創建了一個輔助函數,從鏈接文本中提取鏈接。然後我用sapply填充數據框中的新列。

library("rvest") 
url <- "https://en.wikipedia.org/wiki/UEFA_Euro_2012_squads" 
mytable <- read_html(url) %>% html_nodes("table") %>% .[[1]] 
df <- mytable %>% html_table() 

get_link <- function(html_table, team){ 
    html_table %>% 
    html_nodes(xpath=paste0("//a[text()='", team, "']")) %>% 
    .[[1]] %>% 
    html_attr("href") 
} 

df$club_link <- sapply(df$Club, function(x)get_link(mytable, x)) 
> head(df) 
    0#0 Pos.    Player 
1 1 1GK Wojciech Szczęsny 
2 2 2DF Sebastian Boenisch 
3 3 2DF Grzegorz Wojtkowiak 
4 4 2DF Marcin Kamiński 
5 5 3MF  Dariusz Dudka 
6 6 3MF  Adam Matuszczyk 
        Date of birth (age) Caps Goals 
1 (1990-04-18)18 April 1990 (aged 22) 11  0 
2 (1987-02-01)1 February 1987 (aged 25) 9  0 
3 (1984-01-26)26 January 1984 (aged 28) 19  0 
4 (1992-01-15)15 January 1992 (aged 20) 3  0 
5 (1983-12-09)9 December 1983 (aged 28) 65  2 
6 (1989-02-14)14 February 1989 (aged 23) 20  1 
       Club      club_link 
1    Arsenal   /wiki/Arsenal_F.C. 
2  Werder Bremen  /wiki/SV_Werder_Bremen 
3  Lech Poznań  /wiki/Lech_Pozna%C5%84 
4  Lech Poznań  /wiki/Lech_Pozna%C5%84 
5    Auxerre    /wiki/AJ_Auxerre 
6 Fortuna Düsseldorf /wiki/Fortuna_D%C3%BCsseldorf 
+0

絕對完美,非常感謝你 –