Ich habe eine Liste von etwa 13.000 URLs, die ich aus Informationen extrahieren möchte, aber nicht jede URL existiert tatsächlich. In der Tat nicht die Mehrheit. Ich habe gerade versucht, alle 13.000 URLs durch html()
zu passieren, aber es dauert eine lange Zeit. Ich versuche herauszufinden, ob die URLs tatsächlich vorhanden sind, bevor sie an html()
analysiert werden. Ich habe versucht, httr
und GET()
Funktionen sowie rcurls
und url.exists()
Funktionen zu verwenden. Aus irgendeinem Grund gibt url.exist()
immer FALSE
Werte zurück, selbst wenn die URL existiert, und die Art, wie ich GET()
benutze, gibt immer einen Erfolg zurück, ich denke, das liegt daran, dass die Seite umgeleitet wird.R: Überprüfen der Existenz von URL, Probleme mit HTR: GET() und URL.Exists()
Die folgenden URLs die Art der Seiten repräsentieren ich das Parsen bin, die erste nicht
urls <- data.frame('site' = 1:3, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))
urls$urls <- as.character(urls$urls)
Für GET()
nicht vorhanden ist, ist das Problem, dass die zweite URL tatsächlich nicht existiert, sondern es umgeleitet wird und daher kehrt ein Erfolg".
urls$urlExists <- sapply(1:length(urls[,1]),
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))
Für url.exists()
, erhalte ich drei FALSCH zurückgegeben, obwohl die erste und dritte Urls existieren.
urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))
Ich habe diese beiden Beiträge 1, 2 aber ich würde es vorziehen, nicht einfach einen User-Agenten zu verwenden, weil ich nicht sicher bin, wie meine zu finden oder ob es für andere Menschen ändert diesen Code auf anderen Computern verwenden. Daher macht es den Code schwerer, von anderen übernommen und verwendet zu werden. Beide Antworten empfehlen die Verwendung von GET()
in httr
. Es scheint, dass GET()
ist wahrscheinlich die bevorzugte Methode, aber ich würde herausfinden müssen, wie Sie mit dem Umleitungsproblem umgehen.
Kann jemand einen guten Weg in R vorschlagen, um die Existenz einer URL vor dem Parsing zu html()
zu testen? Ich würde mich auch über andere vorgeschlagene Arbeiten für dieses Thema freuen.
UPDATE:
Nach einem Blick in den zurückgegebenen Wert von GET()
mir um eine Arbeit herausgefunden, siehe Antworten für weitere Einzelheiten.
Sie haben ein konzeptionelles Problem hier. Bei vielen Webservern, wenn Sie versuchen, auf eine Seite zuzugreifen, die nicht existiert, erhalten Sie trotzdem eine Seite! Was Sie wirklich tun möchten, ist zu überprüfen, ob ein 404-Fehler zurückkommt. –
Danke Tim, dein Kommentar hat mir geholfen, herauszufinden, was ich von der 'GET()' Funktion zurückbekommen habe. Ich denke, ich habe eine Arbeit gefunden. Ich habe es am Ende der Frage hinzugefügt. – Adam