如果一个url不是以http开头的,我怎样才能将http预先设置为url呢?

2024-04-20 15:37:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我的URL格式为:

google.com
www.google.com
http://google.com
http://www.google.com

我想将所有类型的链接转换为统一格式,从http://开始

http://google.com

如何使用Python用http://预处理url?


Tags: comhttpurl类型链接www格式google
3条回答

对于您在问题中提到的格式,您可以执行以下简单操作:

def convert(url):
    if url.startswith('http://www.'):
        return 'http://' + url[len('http://www.'):]
    if url.startswith('www.'):
        return 'http://' + url[len('www.'):]
    if not url.startswith('http://'):
        return 'http://' + url
    return url

但请注意,可能还有其他格式是您没有预料到的。此外,请记住,输出URL(根据您的定义)不一定是有效的(即,DNS将无法将其转换为有效的IP地址)。

Python确实有内置函数来正确处理这个问题,比如

p = urlparse.urlparse(my_url, 'http')
netloc = p.netloc or p.path
path = p.path if p.netloc else ''
if not netloc.startswith('www.'):
    netloc = 'www.' + netloc

p = urlparse.ParseResult('http', netloc, path, *p[3:])
print(p.geturl())

如果要删除(或添加)部分www,则必须在调用.geturl()之前编辑结果对象的.netloc字段。

因为ParseResult是一个namedtuple,所以不能就地编辑它,而是必须创建一个新对象。

附言:

对于Python3,应该是urllib.parse.urlparse

我发现使用regex检测协议很容易,如果缺少,可以附加它:

import re
def formaturl(url):
    if not re.match('(?:http|ftp|https)://', url):
        return 'http://{}'.format(url)
    return url

url = 'test.com'
print(formaturl(url)) # http://test.com

url = 'https://test.com'
print(formaturl(url)) # https://test.com

希望有帮助!

相关问题 更多 >