#stahovani seznamu ministru z webu vlady library(rvest) #nacteni linku URL <- "https://www.vlada.cz/cz/clenove-vlady/historie-minulych-vlad/prehled-vlad-cr/1993-2007-cr/" #nacteni stranky #potom je nutne nacist stranku do R, stranky jsou v html jazyce, proto pouzivame prikaz read_html vlada_cz <- read_html(URL) #read_html(URL, ssl.verifyhost = 0L, ssl.verifypeer = 0L, .encoding="iso-8859-2") #stazeni linku na jednotlive vlady linky <- vlada_cz %>% html_nodes(xpath = '//*[@id="content"]/div[1]/ul/li/a') %>% html_attr("href") #prohlednuti vysledku linky #vyber vlad po vladu tosovskeho linky <- linky[1:13] #prevod do tabulky linky <- as.data.frame(linky) #komletace linku linky$link_ok <- paste( "https://www.vlada.cz", linky$linky, sep="") linky #vytvoreni jmena vlad library(stringr) #rozdeleni linku na nekolik casti pomoci lomitka a vytvoreni tabuky z techto casti nasekany_link <- data.frame(do.call('rbind', strsplit(as.character(linky$linky),'/',fixed=TRUE))) head(nasekany_link) #vyber sloupce, ve kterem je jmeno premiera jmeno <- nasekany_link[,7] jmeno <- as.data.frame(jmeno) #vyzkouseni stahnuti linku na prvni vlade v seznamu URL <- linky$link_ok[1] pg <- read_html(URL) linky_ministri <- as.data.frame(pg %>% html_nodes(css = "div.content-main > div > div.col.mergecols-2.detail > * >a") %>% html_attr("href")) linky_ministri for(i in 1:13){ URL <- linky$link_ok[i] pg <- read_html(URL) linky_ministri <- as.data.frame(pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[1]/p/a') %>% html_attr("href")) colnames(linky_ministri) <- "linky_ministri" filename <- paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani\\linky", jmeno$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(linky_ministri, row.names= FALSE, file=filename) #tabulku ulozime } #ve slozce zkontrolujeme, zda se stahovani provedlo spravne, nejlepe otevrenim prvni tabulky a potom tabulek s velikosti 1 kb #najdeme chybu u fischerovy vlády (a vsech casove predchazejicich) #v cem se lisi xpath linku na fisherovy ministry od linku na babisovy ministry #babisova vlada #xpath = '//*[@id="content"]/div[1]/div/div[1]/p/a' #fisherova vlada #xpath = '//*[@id="content"]/div[1]/div/div[1]/div/p[3]/a' #v xpath je jeden div navic #tento problem lze obejit pomoci vyberu CSS nodu #Copy selector #content > div.content-main > div > div.col.mergecols-2.detail >p:nth-child(2) > a #content > div.content-main > div > div.col.mergecols-2 > div > p:nth-child(3) > a #content > div.content-main > div > div.col.mergecols-2 > div > a:nth-child(5) #content > div.content-main > div > div.col.mergecols-2 > div > a:nth-child(5) #stahovani pomoci casti linku linky$prostahovani <- jmeno$jmeno linky$prostahovani[1:3] <- "clenove-vlady" #stazeni linku na ministry for(i in 1:13){ URL <- linky$link_ok[i] pg <- read_html(URL) linky_ministri <- as.data.frame(pg %>% html_nodes(css = paste("a[href*=" ,linky$prostahovani[i],"]", sep="")) %>% html_attr("href")) colnames(linky_ministri) <- "linky_ministri" filename <- paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani\\linky", jmeno$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(linky_ministri, row.names= FALSE, file=filename) #tabulku ulozime } #stahovani pomoci css linky$cssselector <- "div.content-main > div > div.col.mergecols-2.detail > * >a" linky$cssselector[6] <- "div.content-main > div > div.col.mergecols-2 > div > * > a" linky$cssselector[7:12] <- "div.content-main > div > div.col.mergecols-2 > div > a" linky$cssselector[13] <- "div.content-main > div > div.col.mergecols-2 > div > p > a" for(i in 1:13){ URL <- linky$link_ok[i] pg <- read_html(URL) linky_ministri <- as.data.frame(pg %>% html_nodes(css = linky$cssselector[i]) %>% html_attr("href")) colnames(linky_ministri) <- "linky_ministri" filename <- paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani2\\linky", jmeno$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(linky_ministri, row.names= FALSE, file=filename) #tabulku ulozime } #vytvoreni cesty k souborum stazenym do pocitace soubory <-paste("C:\\Users\\petrh\\Documents\\politologie\\vyuka\\datamanagment\\stahovani2\\linky", jmeno$jmeno, '.csv', sep="") #spojeni vsech tabulek v objektu soubor do jedne "pod sebe" vsechny_linky <- do.call(`rbind`,lapply(soubory, read.table, header=T)) #vycisteni prvni casti linku u odkazu, kde je jiz napsan (u spousty neni, musime to pred provedenim paste sjednotit) vsechny_linky$linky_ministri <- gsub("https://www.vlada.cz", "", vsechny_linky$linky_ministri) vsechny_linky$linky_ministri <- gsub("http://www.vlada.cz", "", vsechny_linky$linky_ministri) vsechny_linky$linky_ministri <- gsub("http://vlada.cz", "", vsechny_linky$linky_ministri) head(vsechny_linky$linky_ministri) #vytvoreni kompletnich linku vsechny_linky$ministri <- paste("https://www.vlada.cz", vsechny_linky$linky_ministri, sep="") #vytvoreni sloupcu pro tabulku jmeno <- NA ve_funkci <- NA narozeni <- NA vzdelani <- NA profesni <- NA jazyky <- NA kontakty <- NA #zkouska stahnuti udaju na prvnim priapade URL <- vsechny_linky$ministri[1] pg <- read_html(URL) jmeno[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/h1') %>% html_text() ve_funkci[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[1]') %>% html_text() narozeni[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[2]') %>% html_text() vzdelani[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[3]') %>% html_text() profesni[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[4]') %>% html_text() jazyky[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[5]') %>% html_text() kontakty[1] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[6]') %>% html_text() #zkouska stahnuti udaju na 30 pripadech, provede se jen zcasti kvuli chybe for(i in 1:30){ URL <- vsechny_linky$ministri[i] pg <- read_html(URL) jmeno[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/h1') %>% html_text() ve_funkci[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[1]') %>% html_text() narozeni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[2]') %>% html_text() vzdelani[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[3]') %>% html_text() profesni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[4]') %>% html_text() jazyky[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[5]') %>% html_text() kontakty[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[6]') %>% html_text() } #reseni chyby pomoci trycatch for(i in 1:30){ URL <- vsechny_linky$ministri[i] pg <- read_html(URL) skip_to_next <- FALSE jmeno[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/h1') %>% html_text() ve_funkci[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[1]') %>% html_text() narozeni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[2]') %>% html_text() vzdelani[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[3]') %>% html_text() profesni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[4]') %>% html_text() tryCatch(jazyky[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[5]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { jazyky[i] ==0} tryCatch(kontakty[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[6]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { kontakty[i] ==0} } kontakty[30] <- NA for(i in 1:50){ URL <- vsechny_linky$ministri[i] pg <- read_html(URL) skip_to_next <- FALSE tryCatch(jmeno[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/h1') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { jmeno[i] ==0} tryCatch( ve_funkci[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[1]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { ve_funkci[i] ==0} tryCatch( narozeni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[2]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { narozeni[i] ==0} tryCatch( vzdelani[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[3]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { vzdelani[i] ==0} tryCatch( profesni[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[4]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { profesni[i] ==0} tryCatch(jazyky[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[5]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { jazyky[i] ==0} tryCatch(kontakty[i] <- pg %>% html_nodes(xpath = '//*[@id="content"]/div[1]/div/div[2]/div/p[6]') %>% html_text(), error = function(e) { skip_to_next <<- TRUE}) if(skip_to_next) { kontakty[i] ==0} } #spojeni sloupcu do tabulky tabulka <- as.data.frame(cbind(jmeno, ve_funkci, narozeni ,vzdelani,profesni , jazyky ))