3

如何使用 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

可以这样截断吗?

4

6 回答 6

6

查看 Pythonsurlparse库。它是一个标准库,因此不需要安装其他任何东西。

因此,您可以执行以下操作:

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()如果您想阅读 URL 的其他部分,可以在文档中阅读更多信息,包括索引。

于 2013-06-07T11:53:02.083 回答
4

您可以使用拆分():

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

获取“youtube.com”

和:

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

得到其他一切

于 2013-06-07T11:51:40.867 回答
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'
于 2013-06-07T12:09:40.030 回答
0

没有库函数可以判断这些字符串应该是绝对 URL,因为从形式上讲,它们是相对的。所以,你必须在前面加上//.

>>> url = 'youtube.com/bla/foo'
>>> urlparse.urlsplit('//' + url)[1]
                 > 'youtube.com'
于 2013-06-07T12:01:51.760 回答
0

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

>>> import tldextract
>>> ext = tldextract.extract('youtube.com/video/AiL6nL')
>>> ".".join(ext[1:3])
'youtube.com'
于 2013-06-07T12:04:15.463 回答
0

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

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

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

import urlparse

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

通常,如果您知道所有行都以主机名开头,否则在这里使用正则表达式是安全的,否则每行都包含格式正确的 uri

import re

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

输出

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

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

于 2013-06-09T02:01:49.470 回答