2017-05-11 3 views
0

Ich habe eine .csv-Datei von URLs, die ich validieren muss.Überprüfung der Gültigkeit einer Liste und URLs mit GET

Ich möchte GET von HTR auf jede Zeile des Datenrahmens anwenden.

> websites 
      website 
1 www.msn.com 
2 www.wazl.com 
3 www.amazon.com 
4 www.rifapro.com 

Ich habe ähnliche Fragen gefunden und versucht, die bereitgestellten Antworten anzuwenden; funktioniert aber nicht.

> apply(websites, 1, transform, result=GET(websites$website)) 


    Error: length(url) == 1 is not TRUE 


> apply(websites, websites[,1], GET()) 
Error in handle_url(handle, url, ...) : 
    Must specify at least one of url or handle 

Ich bin mir nicht sicher, was ich falsch mache.

Antwort

1

Sie könnten für eine GET Anfrage imho etwas wie

websites <- read.table(header=T, text="website 
1 www.msn.com 
2 www.wazl.com 
3 www.amazon.com 
4 www.rifapro.com") 
library(httr) 
urls <- paste0(ifelse(grepl("^https?://", websites$website, ig=T), "", "http://"), 
      websites$website) 
lst <- lapply(unique(tolower(urls)), function(url) try(HEAD(url), silent = T)) 
names(lst) <- urls 
sapply(lst, function(x) if (inherits(x, "try-error")) -999 else status_code(x)) 
# http://www.msn.com http://www.wazl.com http://www.amazon.com http://www.rifapro.com 
#    200     -999     405     -999 

Keine Notwendigkeit tun.

+0

Vielen Dank für Ihre prompte Hilfe. Es arbeitet an dem Datensatz, den ich hier bereitgestellt habe, aber nicht an dem größeren, den ich habe. es gibt -999 für alle aber einige sind gültig – Rifa1234

+0

@ Rifa1234 Haben Sie eine Internetverbindung? – lukeA

+0

@ Rifa1234 Neben dem: z.B. Die Fehlermeldungen in 'lst [1: 3]' sollten einen Hinweis auf das Problem geben. Meine Vermutung: Die URLs sind missgebildet. – lukeA

0

@LukeA gab mir die Antwort und ich änderte es nur auf die unten, um ein Datenframe anstelle einer Liste zu generieren. Danke

Lukea
urls <- paste0(ifelse(grepl("^https?://", websitm$WEBSITE, ig=T), "", "http://"), 
    websitm$WEBSITE) 
    lst <- lapply(unique(tolower(urls)), function(url) try(HEAD(url), silent = T)) 
    a<- list(lst,urls) 
b<- as.data.frame(sapply(a, rbind)) 
b$outcome<- sapply(b$V1, function(x) if (inherits(x, "try-error")) -999 else status_code(x)) 

Nach dem obigen Code zu verfeinern:

website<- read.csv(file= "path") 
website<- website[!duplicated(website$Website),] 
websitm<- website 
websitm$Website <- paste0(ifelse(grepl("^(https?://)?www.",websitm[, 2], ig=T), "", "http://www."),websitm[, 2]) 
websitm$Website <- paste0(ifelse(grepl("^https?://",websitm[, 2], ig=T), "", "http://"),websitm[, 2]) 

Httpcode<- function(x){try(HEAD(x, timeout(seconds = 20), silent = T))} 
websitm$error<- apply(websitm[,2, drop=F], 1, Httpcode) 
websitm$outcome<- sapply(websitm$error, function(x) if (inherits(x, "try-error")) -999 else status_code(x)) 
websitm<- data.frame(lapply(websitm, as.character), stringsAsFactors=FALSE)