#stahovani seznamu ministru z webu vlady library(rvest) install.packages("random") library(random) library(tidyverse) #nacteni linku URL <- "https://cs.wikipedia.org/wiki/Seznam_%C4%8Dlen%C5%AF_Poslaneck%C3%A9_sn%C4%9Bmovny_Parlamentu_%C4%8Cesk%C3%A9_republiky" #nacteni stranky #potom je nutne nacist stranku do R, stranky jsou v html jazyce, proto pouzivame prikaz read_html poslanci <- read_html(URL) #zobrazeni nejakeho textu poslanci %>% html_nodes(xpath = '//*[@id="mw-content-text"]/div[1]/p/b') %>% html_text() #read_html(URL, ssl.verifyhost = 0L, ssl.verifypeer = 0L, .encoding="iso-8859-2") - v pripdade potizi je nutne pridat encoding #stazeni linku na jednotlive poslance linky <- poslanci %>% html_nodes(xpath = '//*[@id="mw-content-text"]/div[1]/table/tbody/tr/td[1]/span[2]/a') %>% html_attr("href") #prohlednuti vysledku linky[1:13] #prevod do tabulky linky <- as.data.frame(linky) #komletace linku linky$link_ok <- paste( "https://cs.wikipedia.org/", linky$linky, sep="") linky$link_ok[1:13] linky$jmeno <- gsub( "/wiki/", "", linky$linky) #stazeni informacnich tabulek #vyzkouseni URL <- linky$link_ok[1] pg <- read_html(URL) tabulka <-as.data.frame(t(as.data.frame(pg %>% html_node(".infobox") %>% html_table( fill = TRUE)))) names(tabulka) <- as.matrix(tabulka[1, ]) tabulka <- tabulka[-1, ] tabulka[] <- lapply(tabulka, function(x) type.convert(as.character(x))) #komplet for(i in 1:100){ URL <- linky$link_ok[i] pg <- read_html(URL) tabulka <-as.data.frame(t(as.data.frame(pg %>% html_node(".infobox") %>% html_table( fill = TRUE)))) names(tabulka) <- as.matrix(tabulka[1, ]) tabulka <- tabulka[-1, ] tabulka[] <- lapply(tabulka, function(x) type.convert(as.character(x))) filename <- paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani\\poslanci\\", linky$jmeno[i], '.csv', sep="") ## pred stahovanim je nutne si zalozit slozku, kam se budou soubory stahovat, cesta ke slozce musi byt soucasti jmena stahovaneho souboru write.csv(tabulka, row.names= FALSE, file=filename) #tabulku ulozime pauza <- randomNumbers(n=1, min=1, max=3, col=1, base=10, check=TRUE) #z intervalu 2-5 nahodne vybere cislo, ktere potom poslouzi jako urceni delky pauzy mezi kroky Sys.sleep(pauza) } #vytvoreni cesty k souborum stazenym do pocitace soubory <-paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani\\poslanci\\", linky$jmeno, '.csv', sep="") #spojeni vsech tabulek v objektu soubor do jedne "pod sebe" poslanci <- do.call(`bind_rows`,lapply(soubory, read.table, header=T)) #nebo muzeme vybrat jen to co chceme, v tom pripade je postup nasledujici #vyber informaci do tabulky #vytvoreni sloupcu pro tabulku jmeno <- NA narozeni <- NA vzdelani <- NA profese <- NA partner <- NA deti <- NA strana <- NA #vyzkouseni na jednom pripade URL <- linky$link_ok[1] page <- read_html(URL) table <- page %>% html_node(".infobox") data <- html_table(table) jmeno <- linky$jmeno[1] names(data) <- c("X1", "x2") # Find the row index containing the link "Alma mater" vzdelani_index <- grep("Alma mater", data$X1) clenstvi_index <- grep("Členství", data$X1) narozeni_index <- grep("Narození", data$X1) profese_index <- grep("Profese", data$X1) partner_index <- grep("Choť", data$X1) deti_index <- grep("Děti", data$X1) # vytazeni dat z radku kde je napsano "Alma mater" if (length(vzdelani_index) > 0) { vzdelani[i] <- data[vzdelani_index, 2] } else { # pokud neni v tabulce uvedeno tak se vepise NA vzdelani[i] <- NA} if (length(clenstvi_index) > 0) { strana[1] <- as.character(data[clenstvi_index, 2]) } else { strana[1] <- NA} if (length(narozeni_index) > 0) { narozeni[1] <- as.character(data[narozeni_index, 2]) } else { narozeni[1] <- NA} if (length(profese_index) > 0) { profese[1] <- as.character(data[profese_index, 2]) } else { profese[1] <- NA} if (length(partner_index) > 0) { partner[1] <- as.character(data[partner_index, 2]) } else { partner[1] <- NA} if (length(deti_index) > 0) { deti[1] <- as.character(data[deti_index, 2]) } else { deti[1] <- NA} #provedeni na 100 poslancich for(i in 1:100){ URL <- linky$link_ok[i] page <- read_html(URL) table <- page %>% html_node(".infobox") data <- html_table(table) jmeno[i] <- linky$jmeno[i] names(data) <- c("X1", "x2") # Find the row index containing the link "Alma mater" vzdelani_index <- grep("Alma mater", data$X1) clenstvi_index <- grep("Členství", data$X1) narozeni_index <- grep("Narození", data$X1) profese_index <- grep("Profese", data$X1) partner_index <- grep("Choť", data$X1) deti_index <- grep("Děti", data$X1) # vytazeni dat z radku kde je napsano "Alma mater" if (length(vzdelani_index) > 0) { vzdelani[i] <- data[vzdelani_index, 2] } else { # pokud neni v tabulce uvedeno tak se vepise NA vzdelani[i] <- "NA"} if (length(clenstvi_index) > 0) { strana[i] <- as.character(data[clenstvi_index, 2]) } else { strana[i] <- "NA"} if (length(narozeni_index) > 0) { narozeni[i] <- as.character(data[narozeni_index, 2]) } else { narozeni[i] <- "NA"} if (length(profese_index) > 0) { profese[i] <- as.character(data[profese_index, 2]) } else { profese[i] <- "NA"} if (length(partner_index) > 0) { partner[i] <- as.character(data[partner_index, 2]) } else { partner[i] <- "NA"} if (length(deti_index) > 0) { deti[i] <- as.character(data[deti_index, 2]) } else { deti[i] <- "NA"} } #reseni chyby pomoci trycatch for(i in 1:100){ URL <- linky$link_ok[i] page <- read_html(URL) table <- page %>% html_node(".infobox") data <- html_table(table) skip_to_next <- FALSE tryCatch(jmeno[i] <- linky$jmeno[i], error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { jmeno[i] ==0} names(data) <- c("X1", "x2") # Find the row index containing the link "Alma mater" vzdelani_index <- grep("Alma mater", data$X1) clenstvi_index <- grep("Členství", data$X1) narozeni_index <- grep("Narození", data$X1) profese_index <- grep("Profese", data$X1) partner_index <- grep("Choť", data$X1) deti_index <- grep("Děti", data$X1) # vytazeni dat z radku kde je napsano "Alma mater" if (length(vzdelani_index) > 0) { vzdelani[i] <- data[vzdelani_index, 2] } else { # pokud neni v tabulce uvedeno tak se vepise NA vzdelani[i] <- NA} if (length(clenstvi_index) > 0) { strana[i] <- as.character(data[clenstvi_index, 2]) } else { strana[i] <- NA} if (length(narozeni_index) > 0) { narozeni[i] <- as.character(data[narozeni_index, 2]) } else { narozeni[i] <- NA} if (length(profese_index) > 0) { profese[i] <- as.character(data[profese_index, 2]) } else { profese[i] <- NA} if (length(partner_index) > 0) { partner[i] <- as.character(data[partner_index, 2]) } else { partner[i] <- NA} if (length(deti_index) > 0) { deti[i] <- as.character(data[deti_index, 2]) } else { deti[i] <- NA} } #spojeni sloupcu do tabulky tabulka <- as.data.frame(cbind(jmeno , narozeni , vzdelani , profese , partner, deti, strana ))