在 Python 中从 URL 中提取域名

Posted

技术标签:

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

我正在尝试从 URL 列表中提取域名。就像在 https://***.com/questions/18331948/extract-domain-name-from-the-url 我的问题是 URL 可以是关于一切的,几个例子:m.google.com => googlem.docs.google.com => googlewww.someisotericdomain.innersite.mall.co.uk => mallwww.ouruniversity.department.mit.ac.us => mitwww.somestrangeurl.shops.relevantdomain.net => relevantdomain www.example.info => example 等等.. 域的多样性不允许我使用how to get domain name from URL 中所示的正则表达式(因为我的脚本将在来自真实网络流量的大量 url 上运行,所以正则表达式必须很大才能捕获所有类型如上所述的域)。 不幸的是,我的网络研究没有提供任何有效的解决方案。 有没有人知道如何做到这一点? 任何帮助将不胜感激 ! 谢谢

【问题讨论】:

你可以使用外部库吗? 收集***域列表,用点分割您的网址,从 TLD 中删除您的网址,提取名称。 how to get domain name from URL的可能重复 是的,我可以使用外部库。这不是重复(我什至附上了这个帖子的链接),我在那里找不到令人满意的答案。 使用urllib.parse 【参考方案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'

【讨论】:

注意:tldextract 库在初始安装时发出 http 请求并创建最新 tld 数据的缓存。这可能会引发某些远程部署的权限错误。见这里:github.com/john-kurkowski/tldextract#note-about-caching【参考方案4】:

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

import re

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

【讨论】:

获取域的第一部分,而不是实际域。仅适用于 www.google.com 之类的内容 不可靠的解决方案,避免。

以上是关于在 Python 中从 URL 中提取域名的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3 中从 Web 下载文件

如何在 C# 中从 HTML 文件中提取图像 url

如何在 Perl 中从 HTML 中提取 URL 和链接文本?

Python urlparse——提取没有子域的域名

在 Python 中从 PDF 中提取超链接

在python中从HTML中提取文本[重复]