为什么.split无法按预期执行?

时间:2017-11-09 23:57:55

标签: python split delimiter

我希望这是一个快速的。

我正在尝试从给定的网址获取第二级域名

这是我的代码:

    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”

2 个答案:

答案 0 :(得分:2)

正确的解决方案:不要重新发明轮子,尽可能多地使用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

答案 1 :(得分:0)

在每次结果后打印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