2016-05-12 2 views
3

Im пытаясь очистить страницу https://en.wikipedia.org/wiki/UEFA_Euro_2012_squads и может принимать текстовые данные с тонкой использованием rvestскоблить URLs из таблицы википедии

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]])) 
} 

, но хотелось бы, чтобы добавить дополнительный столбец к этому с URL-адресов на каждом столе для клуба. например для команды 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», что бы показать википедию URL для этого клуба. Например, первый игрок играет за Арсенал, так взять ссылку на столе для Арсенала и создать:

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 для заполнения нового столбца в DataFrame.

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

работает абсолютно отлично, большое спасибо –

Смежные вопросы