次のいずれかの形式の文字列を指定できます。
uRL:例 http://www.acme.com:456
文字列:例:www.acme.com:456、www.acme.com 456、またはwww.acme.com
ホストおよび存在する場合はポートを抽出します。ポート値が存在しない場合は、デフォルトで80に設定します。
私は rlparse を試しましたが、これはurlでは正常に機能しますが、他の形式では機能しません。たとえば、hostname:portでurlparseを使用すると、netlocではなくスキームにホスト名が配置されます。
私はurlparseと正規表現を使用するソリューション、または両方の形式を処理できる単一の正規表現に満足しています。
私はurlparseにはあまり詳しくありませんが、正規表現を使用すると、次のようになります。
p = '(?:http.*://)?(?P<Host>[^:/ ]+).?(?P<port>[0-9]*).*'
m = re.search(p,'http://www.abc.com:123/test')
m.group('Host') # 'www.abc.com'
m.group('port') # '123'
または、ポートなし:
m = re.search(p,'http://www.abc.com/test')
m.group('Host') # 'www.abc.com'
m.group('port') # '' i.e. you'll have to treat this as '80'
編集:「www.abc.com 123」にも一致するように正規表現を修正
Urlparseを使用して、URL文字列からホスト名を取得できます。
from urlparse import urlparse
print urlparse("http://www.website.com/abc/xyz.html").hostname # prints www.website.com
>>> from urlparse import urlparse
>>> aaa = urlparse('http://www.acme.com:456')
>>> aaa.hostname
'www.acme.com'
>>> aaa.port
456
>>>
それが失敗する理由:
www.acme.com 456
これは有効なURIではないためです。なぜあなただけではないのですか?
:
に置き換えますurlparse
メソッドを使用して、結果の文字列を解析します特にURIのようなよく知られているフォーマットの解析などに関しては、デフォルトの機能をできる限り使用してください。
urllibを使用するメソッド-
from urllib.parse import urlparse
url = 'https://stackoverflow.com/questions'
print(urlparse(url))
出力-
ParseResult(scheme = 'https'、netloc = 'stackoverflow.com'、path = '/ questions'、params = ''、query = '' 、フラグメント= '')
リファレンス- https://www.tutorialspoint.com/urllib-parse-parse-urls-into-components-in-python