web-dev-qa-db-ja.com

URLからドメイン名を抽出Python

私は、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調査では効率的なソリューションは提供されませんでした。
これを行う方法について誰かが知っていますか?
何か助けていただければ幸いです!
ありがとうございました

10
usr371

tldextractのより効率的なバージョンであるurlparseを使用します。tldextractgTLDまたは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'
17
akash karothiya

Urlparse https://docs.python.org/3/library/urllib.parse.html をそのURLに使用して、netlocを抽出できるようです。

そして、netlocから、splitを使用してドメイン名を簡単に抽出できます。

4
Mariano Anaya

正規表現では、次のようなものを使用できます。

(?<=\.)([^.]+)(?:\.(?:co\.uk|ac\.us|[^.]+(?:$|\n)))

https://regex101.com/r/WQXFy6/5

co.ukなどの特殊なケースに注意する必要があります。

0
oddRaven