Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python从URL获取子域_Python_String_Url - Fatal编程技术网

使用Python从URL获取子域

使用Python从URL获取子域,python,string,url,Python,String,Url,例如,地址是: 地址= 我想把子域保存到一个变量中,这样我就可以这样做了 print SubAddr >> lol1 一个非常基本的方法,没有任何健全性检查,可能看起来像: address = 'http://lol1.domain.com:8888/some/page' host = address.partition('://')[2] sub_addr = host.partition('.')[0] print sub_addr 当然,这是假设当你说“子域”时,你是指

例如,地址是:

地址=

我想把子域保存到一个变量中,这样我就可以这样做了

print SubAddr
>> lol1

一个非常基本的方法,没有任何健全性检查,可能看起来像:

address = 'http://lol1.domain.com:8888/some/page'

host = address.partition('://')[2]
sub_addr = host.partition('.')[0]

print sub_addr
当然,这是假设当你说“子域”时,你是指主机名的第一部分,因此在以下情况下,“www”将是子域:


这就是你的意思吗?

为了提取主机名,我将使用urllib2中的URLPASSE:

>>> from urllib2 import urlparse
>>> a = "http://lol1.domain.com:8888/some/page"
>>> urlparse.urlparse(a).hostname
'lol1.domain.com'
至于如何提取子域,您需要考虑FQDN可能更长的情况。你如何做到这一点取决于你的目的。我可能建议剥离最右边的两个组件

例如


urlparse.urlparse
将URL拆分为协议、位置、端口等。然后您可以通过
拆分位置以获取子域

url = urlparse.urlparse(address)
subdomain = url.hostname.split('.')[0]

您需要的是:

例如:
“.join(urlparse(“)http://www.my.cwi.nl:80/%7Eguido/Python.html.netloc.split(“.”[:-2])


将为您完成这项工作(将返回“www.my”)

此处是奇妙答案的修改版本:

您将需要来自的有效TLD列表

给你:

Domain: example Subdomains: ['sub2', 'sub1'] TLD: co.uk
Extracted domain name :  domain
域:示例 子域:['sub2','sub1'] TLD:co.uk 软件包使这项任务变得非常简单,如果您需要任何进一步的信息,您可以按照建议使用urlparse

>> import tldextract
>> tldextract.extract("http://lol1.domain.com:8888/some/page"
ExtractResult(subdomain='lol1', domain='domain', suffix='com')
>> tldextract.extract("http://sub.lol1.domain.com:8888/some/page"
ExtractResult(subdomain='sub.lol1', domain='domain', suffix='com')
>> urlparse.urlparse("http://sub.lol1.domain.com:8888/some/page")
ParseResult(scheme='http', netloc='sub.lol1.domain.com:8888', path='/some/page', params='', query='', fragment='')
请注意,tldextract正确地处理子域。

我们可以使用它来解决此问题

这很容易

>>> ext = tldextract.extract('http://forums.bbc.co.uk')
>>> (ext.subdomain, ext.domain, ext.suffix)
('forums', 'bbc', 'co.uk')
将TLD与URL的注册域和子域分开

装置

pip install tldextract
关于当前问题:

import tldextract

address = 'http://lol1.domain.com:8888/some/page'
domain = tldextract.extract(address).domain
print("Extracted domain name : ", domain)
输出:

Domain: example Subdomains: ['sub2', 'sub1'] TLD: co.uk
Extracted domain name :  domain
此外,还有许多示例与tldextract.extract side的使用极为相关。

首先导入tldextract,因为这将URL拆分为其组成部分,如:子域。域和后缀

然后声明一个存储查询结果的变量(比如ext)。我们还必须在括号中用双引号提供URL。如下图所示:

ext = tldextract.extract("http://lol1.domain.com:8888/some/page")

如果我们只是尝试运行ext变量,输出将是:

ExtractResult(subdomain='lol1', domain='domain', suffix='com')
'lol1'
'domain'
'com'
'lol1'
然后,如果您只想使用子域、域或后缀,则分别使用以下任意代码

ext.subdomain
结果将是:

ExtractResult(subdomain='lol1', domain='domain', suffix='com')
'lol1'
'domain'
'com'
'lol1'
结果将是:

ExtractResult(subdomain='lol1', domain='domain', suffix='com')
'lol1'
'domain'
'com'
'lol1'
结果将是:

ExtractResult(subdomain='lol1', domain='domain', suffix='com')
'lol1'
'domain'
'com'
'lol1'
此外,如果只想在变量中存储子域的结果,请使用以下代码:

Sub_Domain = ext.subdomain
然后打印Sub_域

Sub_Domain
结果将是:

ExtractResult(subdomain='lol1', domain='domain', suffix='com')
'lol1'
'domain'
'com'
'lol1'

这些问题应该很有用:这假设主域名有两个部分——在某些情况下,这两个部分会下降,例如
.co.uk
地址。除了英国,以色列、巴西和日本都有正式的二级域名,可能还有其他域名。我的答案是使用有效的TLD列表来解决这个问题。效果非常好。我像这样使用Node=urlparse.urlparse(address.hostname.split('..')[0]如果它是一个IP地址呢?如果它有一个二级子域呢?子域可能包含多个点,因此
api。test
也是有效的,请记住这一点。如果您想要一个好的包来完成此操作,请检查
https://pypi.python.org/pypi/tldextract
。这实际上是一个非常糟糕的答案。如果没有子域,它将失败,而返回该域。它对IP地址失败(ok,很好),对多个子域失败,如
web.host1.google.com
。同意上面所说的。它只在特定的情况下才有效。这应该是答案。谢谢。很好的答案,应该被选为最佳答案:)谢谢更新链接到“有效TLD列表”:,