如何使用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
是否可以像这样截断?
答案 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)))
youtube.com
yahoo.com
youtube.com
google.com
youtube.com
注意:它不会删除可选的端口部分 - host:port
。