如何使用 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
可以这样截断吗?
如何使用 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
可以这样截断吗?
查看 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 的其他部分,可以在文档中阅读更多信息,包括索引。
您可以使用拆分():
myUrl.split(r"/")[0]
获取“youtube.com”
和:
myUrl.split(r"/", 1)[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'
没有库函数可以判断这些字符串应该是绝对 URL,因为从形式上讲,它们是相对的。所以,你必须在前面加上//
.
>>> url = 'youtube.com/bla/foo'
>>> urlparse.urlsplit('//' + url)[1]
> 'youtube.com'
只是一个使用tldextract的疯狂替代解决方案:
>>> import tldextract
>>> ext = tldextract.extract('youtube.com/video/AiL6nL')
>>> ".".join(ext[1:3])
'youtube.com'
对于您的特定输入,您可以使用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
。