【问题标题】:Extract domain name from URL in Python在 Python 中从 URL 中提取域名
【发布时间】:2017-10-16 17:43:42
【问题描述】:

我正在尝试从 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
等等..
域的多样性不允许我使用how to get domain name from URL 中所示的正则表达式(因为我的脚本将在来自真实网络流量的大量 url 上运行,所以正则表达式必须很大才能捕获所有类型如上所述的域)。
不幸的是,我的网络研究没有提供任何有效的解决方案。
有没有人知道如何做到这一点?
任何帮助将不胜感激 !
谢谢

【问题讨论】:

  • 你可以使用外部库吗?
  • 收集顶级域列表,用点分割您的网址,从 TLD 中删除您的网址,提取名称。
  • 是的,我可以使用外部库。这不是重复(我什至附上了这个帖子的链接),我在那里找不到令人满意的答案。
  • 使用urllib.parse

标签: python regex url server package


【解决方案1】:

看来你可以对那个url使用urlparse https://docs.python.org/3/library/urllib.parse.html,然后提取netloc。

您可以通过使用 split 轻松地从 netloc 中提取域名

【讨论】:

  • 感谢您的回复,不幸的是,在 m.city.domain.com 这样的 url 上使用 urlparse 返回了我 ParseResult(scheme='', netloc='', path='m.city.domain.com', params='', query='', fragment=''),而预期的输出是 domain
  • 使用有效的 URL (//m.city.domain.com/),而不是 (m.city.domain.com)。没有人能猜到你删除反斜杠时传递了什么。
【解决方案2】:

使用正则表达式,您可以使用如下内容:

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

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

注意,您必须注意特殊情况,例如 co.uk

【讨论】:

    【解决方案3】:

    使用tldextracturlparse 的更高效版本,tldextract 准确地将gTLDccTLD(通用或国家代码顶级域)与注册的domainsubdomains 区分开来一个网址。

    >>> import tldextract
    >>> ext = tldextract.extract('http://forums.news.cnn.com/')
    ExtractResult(subdomain='forums.news', domain='cnn', suffix='com')
    >>> ext.domain
    'cnn'
    

    【讨论】:

    【解决方案4】:

    通过正则表达式的简单解决方案

    import re
    
    def domain_name(url):
        return url.split("www.")[-1].split("//")[-1].split(".")[0]
    

    【讨论】:

    • 获取域的第一部分,而不是实际域。仅适用于 www.google.com 之类的内容
    • 不可靠的解决方案,避免。
    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2011-05-06
    • 2018-09-08
    • 1970-01-01
    • 2017-10-22
    • 2011-11-05
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多