Validierung von URLs in Python
Habe ich versucht herauszufinden, was der beste Weg zum überprüfen einer URL ist (speziell in Python), aber bisher nicht wirklich in der Lage, eine Antwort zu finden. Wie es scheint, gibt es nicht eine bekannte Methode zum überprüfen einer URL, und es hängt davon ab, was URLs, die Sie denken, können Sie bestätigen müssen. Auch fand ich es schwierig zu finden, leicht zu Lesen-standard für die URL-Struktur. Ich fand die RFC 3986 und 3987, aber Sie enthalten viel mehr als nur, wie Sie strukturiert ist.
Bin ich etwas fehlt, oder ist es nicht eine standard-Validierung einer URL?
- was Fragen Sie? Sie möchten wissen, ob eine domain in einem korrekten format? Wo ist dein code?
- möglich, Duplikat der Wie kann überprüft werden, ob eine URL mit einem regulären Ausdruck in Python?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses sieht wie es könnte ein Duplikat Wie kann überprüft werden, ob eine URL mit einem regulären Ausdruck in Python?
Sollten Sie in der Lage sein zu verwenden, die
urlparse
Bibliothek dort beschrieben.call
urlparse
auf die Zeichenfolge, die Sie überprüfen möchten, und stellen Sie dann sicher, dass dieParseResult
hat Attribute fürscheme
undnetloc
rfc3987
(pypi.python.org/pypi/rfc3987) oder mehr verarbeiten auf der urlparse Ergebnis. urlparse nicht wirklich überprüfen netloc als "internet-url" - ich habe gebissen von dieser auch". urlparse('invalidurl') geben Sie eine netloc + Schema.ParseResult(scheme='', netloc='', path='invalidurl', params='', query='', fragment='')
, so dass keinenetloc
oderscheme
. Aber das sieht aus wie ein besseres Paket für dieses problem, so stellt auch die Validierung.urlparse.urlparse('http://invalidurl')
- beachten Sie die Regelung wurde abgestreift vom original. dieurlparse
Modul interpretiert 'invalidurl" als hostname für die netloc-das ist eine richtige interpretation für das Allgemeine format, aber die meisten Leute nicht wollen Sachen wie das zu passieren. ich habe festgestellt, zu viele Tippfehler wiehttp://example.com
->http://examplecom
. wenn Sie ip-Adressen, die es nicht durchsetzen ipv4-oder ipv6-entweder, so wird es akzeptieren999.999.999.999.999
zu.rfc3987
können durch diese beiden Fälle als gut (999.999.999.999.999.999
undhttp://examplecom
).import urllib.parse as urlparse
from urllib.parse import urlparse
wie der obige code importiert die gesamten parse-ModulDie ursprüngliche Frage ist ein bisschen alt, aber vielleicht wollen Sie auch Blick auf die Validator-Sammlung Bibliothek, die ich veröffentlicht ein paar Monate zurück. Es umfasst hoch-performante regex-basierte Validierung von URLs für compliance-gegen die RFC-standard. Einige details:
re
Modul)Es ist auch sehr einfach zu bedienen:
Darüber hinaus Validator-Sammlung umfasst über 60+ andere Prüfungen, einschließlich der domains und E-Mail-Adressen sowie, so etwas Leute nützlich finden könnten.
Würde ich die Prüfer-Paket. Hier ist die link um die Dokumentation und Installationsanweisungen.
Es ist genauso einfach, wie
Wird true zurückgegeben, wenn es ist, und false, wenn nicht.
können Sie auch versuchen, mit
urllib.request
zu validieren, indem die URL in dieurlopen
Funktion und die exception zu fangen fürURLError
.Dies würde
return False
in diesem FallVorausgesetzt, Sie verwenden python 3, könnten Sie das urllib. Der code würde etwa so gehen:
Wenn es keine Fehler auf der Zeile "Antwort = ...", dann die url gültig ist.