我如何使用python截断网址

时间:2013-06-07 11:50:08

标签: python

如何使用python截断域“com”旁边的以下URL。即你tube.com只

    youtube.com/video/AiL6nL
    yahoo.com/video/Hhj9B2
    youtube.com/video/MpVHQ
    google.com/video/PGuTN
    youtube.com/video/VU34MI

是否可以像这样截断?

6 个答案:

答案 0 :(得分:6)

查看Pythons urlparse库。它是一个标准库,因此无需安装其他任何东西。

所以你可以做到以下几点:

import urlparse
import re

def check_and_add_http(url):
    # checks if 'http://' is present at the start of the URL and adds it if not.
    http_regex = re.compile(r'^http[s]?://')
    if http_regex.match(url):
        # 'http://' or 'https://' is present
        return url
    else:
        # add 'http://' for urlparse to work.
        return 'http://' + url

for url in url_list:
    url = check_and_add_http(url)
    print(urlparse.urlsplit(url)[1])

如果您想阅读网址的其他部分,可以在文档中阅读有关urlsplit()的更多信息,包括索引。

答案 1 :(得分:4)

您可以使用split():

myUrl.split(r"/")[0]

获取“youtube.com”

myUrl.split(r"/", 1)[1]

获取其他所有内容

答案 2 :(得分:1)

我使用标准库中的函数urlsplit

from urlparse import urlsplit # python 2
from urllib.parse import urlsplit # python 3

myurl = "http://docs.python.org/2/library/urlparse.html"
urlsplit(myurl)[1] # returns 'docs.python.org'

答案 3 :(得分:0)

没有库函数可以告诉那些字符串应该是绝对URL,因为正式地说它们是相对的。所以,你必须先加//

>>> url = 'youtube.com/bla/foo'
>>> urlparse.urlsplit('//' + url)[1]
                 > 'youtube.com'

答案 4 :(得分:0)

使用tldextract只是一个疯狂的替代解决方案:

>>> import tldextract
>>> ext = tldextract.extract('youtube.com/video/AiL6nL')
>>> ".".join(ext[1:3])
'youtube.com'

答案 5 :(得分:0)

对于您的特定输入,您可以使用str.partition() or str.split()

print('youtube.com/video/AiL6nL'.partition('/')[0])
# -> youtube.com

注意:urlparse模块(您通常可以用来解析网址)在这种情况下不起作用:

import urlparse

urlparse.urlsplit('youtube.com/video/AiL6nL')
# -> SplitResult(scheme='', netloc='', path='youtube.com/video/AiL6nL',
#                query='', fragment='')

一般情况下,如果您知道所有行都以主机名开头,并且每行包含a well-formed uri,那么在此处使用正则表达式是安全的:

import re

print("\n".join(re.findall(r"(?m)^\s*([^\/?#]*)", text)))

Output

youtube.com
yahoo.com
youtube.com
google.com
youtube.com

注意:它不会删除可选的端口部分 - host:port