Closed matevzraspet closed 6 years ago
Po straneh lahko skačeš tako, da na koncu URL-ja dodaš še &page=
in številko strani (od 1 naprej). Tako bo najbolje, če si pripraviš funkcijo za uvoz izbrane strani:
uvozi.igralce <- function(stran) {
link <- sprintf("https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?land_id=0&ausrichtung=alle&spielerposition_id=alle&altersklasse=alle&jahrgang=0&plus=1&page=%d", stran)
tabela <- html_session(link) %>% read_html() %>% html_nodes(xpath="//table") %>% .[[2]]
podrobno <- tabela %>% html_table(dec = ",", fill = TRUE) %>%
.[, -c(1, 2, 3, 7, 8)] %>% na.omit()
colnames(podrobno) <- c("igralec", "pozicija", "starost", "vrednost", "odigrane.tekme",
"zadeti.goli", "avtogoli", "asistence", "rumeni.kartoni", "drugi.rumeni.karton",
"rdeci.karton", "prisel.kot.menjava", "odsel.na.klop")
podrobno$drzava <- tabela %>% html_nodes(xpath="./tbody/tr/td[4]/img[1]") %>% html_attr("alt")
podrobno$klub <- tabela %>% html_nodes(xpath="./tbody/tr/td[5]/a/img[1]") %>% html_attr("alt")
return(podrobno)
}
Ker html_table
izpusti podatke, ki niso v besedilu tabele - torej med drugim državo in klub - bo treba za te poskrbeti ročno. V zgornji kodi se tako prebere atribut alt
pri prvi sliki v četrtem oziroma petem stolpcu v tabeli, prebrani podatki pa se dodajo kot stolpec v končno razpredelnico.
Da dobiš podatke iz npr. prvih 4 strani, lahko potem narediš enostavno
igralci <- lapply(1:4, uvozi.igralce) %>% bind_rows()
Mimogrede: svetujem, da v imenih stolpcev ne uporabljaš presledkov (pa tudi ne šumnikov in ostalih posebnih znakov), saj se boš kasneje tako lažje skliceval nanje. V zgornjem primeru sem tako presledke nadomestil s pikami.
Podatke, ki jih tako pridobiš, pretvori še v obliko tidy data. Svetujem, da narediš dve tabeli: eno z osnovnimi podatki (ime, pozicija, starost, vrednost, država, klub - seveda pretvori vrednost v število), in eno s številskimi podatki (stolpci, ki se nanašajo na tekme, gole in kartone, bodo tako pretvorjeni v vrstice).
Zmenjeno, najlepša hvala za pomoč.
Pozdravljeni, imam problem, da ne vem točno kako bi iz spletne strani(link naveden spodaj) pobral več podatkov iz tabele. Spletna stran namreč prikazuje 25 zadetkov v tabeli na stran, potem pa je treba klikniti naprej za novih 25 podatkov(povezava do spletne strani pa ostaja identična).
Sam sem tako uvozil tabelo s 25 podatki, rad pa bi uvozil 100 podatkov. Koda je navedena spodaj.
link <- "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?land_id=0&ausrichtung=alle&spielerposition_id=alle&altersklasse=alle&jahrgang=0&plus=1" stran <- html_session(link) %>% read_html() podrobno <- stran %>% html_nodes(xpath="//table") %>% .[[2]] %>% html_table(dec = ",", fill = TRUE) podrobno <- podrobno[,-c(1,2,3,7,8)] colnames(podrobno) <- c("igralec", "pozicija", "starost", "vrednost", "odigrane tekme", "zadeti goli", "avtogoli", "asistence", "rumeni kartoni", "drugi rumeni karton", "rdeci karton","prisel kot menjava","odsel na klop") podrobno <-na.omit(podrobno)
Najlepša hvala za pomoč,
Matevž Raspet