私は、URLのリストからドメイン名を抽出しようとしています。 https://stackoverflow.com/questions/18331948/extract-domain-name-from-the-url のように
私の問題は、URLがすべてに関するものである可能性があることです、いくつかの例:m.google.com
=> google
m.docs.google.com
=> google
www.someisotericdomain.innersite.mall.co.uk
=> mall
www.ouruniversity.department.mit.ac.us
=> mit
www.somestrangeurl.shops.relevantdomain.net
=> relevantdomain
www.example.info
=> example
等々..
RLからドメイン名を取得する方法 に示すように、ドメインの多様性により正規表現を使用できません=(スクリプトがリアルタイムのネットワークトラフィックで実行されるため、述べたように、あらゆる種類のドメインをキャッチするには、正規表現が巨大でなければなりません。
残念ながら、私のWeb調査では効率的なソリューションは提供されませんでした。
これを行う方法について誰かが知っていますか?
何か助けていただければ幸いです!
ありがとうございました
tldextract
のより効率的なバージョンであるurlparse
を使用します。tldextract
はgTLD
またはccTLD
を正確に区切ります(ジェネリックまたは国コードのトップレベル)ドメイン)URLの登録済みdomain
およびsubdomains
から。
>>> import tldextract
>>> ext = tldextract.extract('http://forums.news.cnn.com/')
ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')
>>> ext.domain
'cnn'
Urlparse https://docs.python.org/3/library/urllib.parse.html をそのURLに使用して、netlocを抽出できるようです。
そして、netlocから、splitを使用してドメイン名を簡単に抽出できます。
正規表現では、次のようなものを使用できます。
(?<=\.)([^.]+)(?:\.(?:co\.uk|ac\.us|[^.]+(?:$|\n)))
https://regex101.com/r/WQXFy6/5
co.uk
などの特殊なケースに注意する必要があります。