私は(特にPythonで)URLを検証する最良の方法が何であるかを理解しようとしましたが、実際には答えを見つけることができませんでした。 URLを検証する方法は1つも知られていないようで、検証する必要があると思われるURLによって異なります。また、URL構造の読みやすい標準を見つけるのが難しいことに気付きました。 RFC 3986と3987は見つかりましたが、RFCの構造だけでなく、それ以上のものが含まれています。
何か不足していますか、それともURLを検証する標準的な方法はありませんか?
これは重複しているようです Pythonで正規表現を使用してURLを検証するにはどうすればよいですか
そこで説明されているurlparse
ライブラリを使用できるはずです。
>>> from urllib.parse import urlparse # python2: from urlparse import urlparse
>>> urlparse('actually not a url')
ParseResult(scheme='', netloc='', path='actually not a url', params='', query='', fragment='')
>>> urlparse('http://google.com')
ParseResult(scheme='http', netloc='google.com', path='', params='', query='', fragment='')
チェックする文字列に対してurlparse
を呼び出し、次にParseResult
にscheme
およびnetloc
の属性があることを確認します
元の質問は少し古いですが、数か月前にリリースした Validator-Collection ライブラリも確認することをお勧めします。これには、RFC標準に準拠するためのURLの高性能な正規表現ベースの検証が含まれます。いくつかの詳細:
re
モジュール)使い方もとても簡単です。
from validator_collection import validators, checkers
checkers.is_url('http://www.stackoverflow.com')
# Returns True
checkers.is_url('not a valid url')
# Returns False
value = validators.url('http://www.stackoverflow.com')
# value set to 'http://www.stackoverflow.com'
value = validators.url('not a valid url')
# raises a validator_collection.errors.InvalidURLError (which is a ValueError)
さらに、 Validator-Collection には、ドメインやメールアドレスなど、他に約60以上のバリデーターが含まれているため、他の人にも役立つかもしれません。
urllib.request
は、urlopen
関数でURLを渡し、URLError
の例外をキャッチして検証します。
from urllib.request import urlopen, URLError
def validate_web_url(url="http://google"):
try:
urlopen(url)
return True
except URLError:
return False
これはreturn False
この場合
バリデーターパッケージを使用します。これは、ドキュメントとインストール手順への link です。
それはと同じくらい簡単です
import validators
url = 'YOUR URL'
validators.url(url)
ある場合はtrueを返し、そうでない場合はfalseを返します。