为什么 .split 没有按预期执行?

Why is .split failing to do as expected?

我希望这是一个快速的。

我正在尝试从给定的 URL

获取二级域名

这是我的代码:

    url = url.split(".", 1)[1]
    url = url.split('//', 1)[-1]
    url = url.split("/", 0)[0]

问题出在最后一行,出于某种原因,它似乎什么也没做。

如果我喂它url = "http://www.nba.com/sports"

我回来了"nba.com/sports"

我正在尝试 "nba.com"

在每个结果后打印 url,您将看到您需要做什么:

>>> url = "http://www.nba.com/sports"
>>> url = url.split(".", 1)[1]
>>> print(url)
nba.com/sports

在这里之后,很明显我们需要做的只是在 / 处拆分。不要过于复杂:)

>>> url = url.split("/")[0]
>>> print(url)
nba.com

正如@Mark 在评论中提到的,您还可以使用 urllib.urlparse:

>>> from urllib.parse import urlparse
>>> url = "http://www.nba.com/sports"
>>> urlparse(url)
ParseResult(scheme='http', netloc='www.nba.com', path='/sports', params='', query='', fragment='')
>>> urlparse(url).netloc
'www.nba.com'

然后,如果需要,您可以从第一个 . 中删除所有内容,但根据您正在做的事情,您可能不需要这样做。

请注意,如果您使用的是 Python 2,则模块为 urlparse

正确的解决方案:不要重新发明轮子,尽可能多地使用the existing libraries

from urllib.parse import urlsplit
# On Py2, from urlparse import urlsplit

url = "http://www.nba.com/sports"
domain = urlsplit(url).hostname
# split off the last two components, then join them back together to make
# the second level domain
secondlevel = '.'.join(domain.rsplit('.', 2)[-2:])
print(secondlevel)

这让你 nba.com.