2017-09-12 3 views
3

Je veux régulièrement des images d'organismes pour compléter les ensembles de données et ce serait génial si je pouvais sortir une image d'espèce pour, disons un grand dauphin, étant donné le genre et l'espèce. Je voudrais ensuite utiliser cette image dans une application éducative K12 Shiny similaire à this one pour les élèves à explorer l'ensemble de données. J'ai trouvé un moyen d'obtenir l'URL et quelques informations sur la page avec le package WikipediR, mais je n'arrive pas à comprendre comment extraire l'URL de l'image dans la barre latérale.Comment télécharger une image Wikipedia pour une page d'espèce

require(WikipediR) 
page_info("en","wikipedia",page="Tursiops truncatus") 

Je sais qu'il ya un moyen (à savoir here), mais je ne comprends pas vraiment comment faire ce travail dans R.

+1

Je ne pense pas que vous devez utiliser package WikipediaR ou même l'API Wikimedia. Je voudrais juste suggérer l'aide de rvest, semblable à cette question ici: https://stackoverflow.com/questions/36202414/r-download-image-using-rvest – Stedy

+0

Merci beaucoup de m'avoir indiqué dans cette direction! Cela m'a conduit à ce que je cherchais! Cheers – mattador

Répondre

3

Merci à la suggestion de Stedy, j'ai trouvé une solution. Notez qu'il existe 2 paquets d'interface Wikipédia nommés de la même manière pour R. Celui-ci utilise WikipediR, pas Wikipédia.

require(WikipediR); require(rvest) 

#titles= vector of page name(s) 
#res= desired width in pixels (220 px thumbnail by default) 
#savedest= save destination (w terminal '/'); wd by default 

getwikipic<-function(titles,res,savedest){ 
    if(missing(res)){res=220} 
    if(missing(savedest)){savedest=NA} 
    lapply(titles, function (ttl,...){ 
    d<-page_info("en","wikipedia",page=ttl,clean_response=T) 
    url<-d[[1]]$fullurl 
    wikipage<-html_session(url) 
    imginfo<-wikipage %>% html_nodes("tr:nth-child(2) img") 
    img.url<- imginfo[1] %>% html_attr("src") 
    img.url<-paste0("https:",img.url) 
    if(is.na(savedest)){ 
    savefilename<-paste0(ttl,".jpg") 
    }else{savefilename<-paste0(savedest,ttl,".jpg")} 

    if(res!=220){img.url<-gsub(220,res,img.url)} 

    download.file(img.url,savefilename) 
    return(paste0("orig.file: ",basename(img.url)))#tell user original filename (or error) 

    },res,savedest)#End lapply 
}#End function 

Sinon, je créé un repo GitHub avec le code here. Vous pouvez source et exécuter ce tout simplement dans l'affaire R.

devtools::source_url("https://raw.githubusercontent.com/drwilkins/getwikipic/master/getwikipic.R") 

titles<-c("numbat") 
getwikipic(titles,1024) 

Téléchargements à votre répertoire de travail pic

+0

Vous pouvez accepter votre propre réponse – useR

+0

puisque votre code n'est pas si long, pourriez-vous s'il vous plaît poster (c'est-à-dire couper et coller) ici en plus de fournir le lien Github? SO encourage fortement à apporter des réponses aussi autonomes que possible ... –

+0

Pas de problème. Code ajouté! – mattador