2017-09-12 3 views
3

herunterlädt Ich möchte routinemäßig Bilder von Organismen, um Datensätze zu ergänzen, und es wäre toll, wenn ich ein Speziesbild für, sagen wir ein Großer Tümmler, angesichts der Gattung und Arten herausziehen könnte. Ich würde dieses Bild dann in einer K12 Shiny-Lernanwendung ähnlich wie this one für Schüler verwenden, um den Datensatz zu erkunden. Ich habe einen Weg gefunden, die URL und einige Seiteninformationen mit dem WikipediR Paket zu erhalten, aber ich kann nicht herausfinden, wie man die URL für das Bild in der Seitenleiste extrahiert.Wie man ein Wikipedia-Bild für eine Speziesseite

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

Ich weiß, dass es einen Weg gibt (das heißt here), aber ich weiß nicht wirklich verstehen, wie diese Arbeit in R.

+1

Ich glaube nicht, müssen Sie verwenden WikipediaR Paket oder sogar die Wikimedia API-Quelle und ausführen. Ich würde nur vorschlagen, rvest, ähnlich wie diese Frage hier: https://StackOverflow.com/Questions/36202414/R-Download-Bild-using-Rvest – Stedy

+0

Danke, so viel für mich in diese Richtung! Das hat mich zu dem geführt, wonach ich gesucht habe! Prost – mattador

Antwort

3

Dank Stedy Vorschlag zu machen, fand ich eine Lösung. Beachten Sie, dass es zwei ähnlich benannte Wikipedia-Schnittstellenpakete für R gibt. Diese verwendet WikipediR, nicht WikipediaR.

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 

Alternativ habe ich ein GitHub Repo mit dem Code here. Sie können dies ganz einfach in R.

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

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

Downloads diese zu Ihrem Arbeitsverzeichnis pic

+0

Sie können Ihre eigene Antwort – useR

+0

akzeptieren, da Ihr Code nicht so lang ist, könnten Sie bitte hier (einschließlich Ausschneiden und Einfügen) es hier zusätzlich zur Bereitstellung der Github-Link? SO ermutigt stark dazu, Antworten so eigenständig wie möglich zu machen ... –

+0

Kein Problem. Code hinzugefügt! – mattador

Verwandte Themen