【问题标题】:Extract domain from URL with dashes in python在python中使用破折号从URL中提取域
【发布时间】:2021-03-24 16:28:58
【问题描述】:

我一直在寻找一种从 URL 解析域的方法。有很多图书馆,但我还没有找到一个完整的。我目前正在使用urllib.parse。在解析带有破折号 (-) 的域时,它不会返回任何内容。还有其他我应该考虑使用的选项吗?

例子:

from urllib.parse import urlparse

print(urlparse("www.bax-shop.nl/muziekwinkel-goes").netloc)

输出:



Process finished with exit code 0

编辑: 它似乎与 URL 前面的 https:// 一起使用。我觉得有点奇怪。

【问题讨论】:

  • 如果你为其提供方案/协议类型,它将很好地解析urlparse("http://www.bax-shop.nl/muziekwinkel-goes")
  • @ChrisDoyle 的问题是它解析了几百万个有和没有 https 的 URL。我可以添加某种参数吗?
  • 那么它们不是真正的 URL,URL 有一个规范 <scheme>:<scheme-specific-part> 所以如果你的数据没有像 http:// https:// ftp:// 这样的架构,那么你将无法解析它们与 urlparse 一起使用,因为它们不是有效的 url。您可以添加一些代码来说明它没有架构,只需在前面加上 http:// 然后将其提供给 url 解析

标签: python urlparse


【解决方案1】:

正如其他人已经在 cmets 中声明的那样,每个 URL 都应该以一个方案开头,在您的情况下很可能是 httphttps。这并不奇怪,方案对于使 URL 解析器了解他们应该做什么(使用哪种协议连接到地址)至关重要。当然,您可以制作一个解析器来接受类似 URL 的字符串(同样,不是真正的 URL,因为它不能没有第一部分)并从中提取域名。

在你的情况下,我会这样做:

from urllib.parse import urlparse


def get_domain_name(url):
    if '://' not in url:
        # Making `http` the default protocol so that urllib handles url correctly
        url = 'http://' + url

    return urlparse(url).netloc


if __name__ == "__main__":
    print(get_domain_name("https://stackoverflow.com/"))
    print(get_domain_name("www.bax-shop.nl/muziekwinkel-goes"))

【讨论】:

  • @Studentdev,这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2012-09-08
  • 2017-10-16
  • 2013-10-09
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
相关资源
最近更新 更多