Как я могу добавить http к url, если он не начинается с http?


У меня есть URL-адреса в формате:

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

Я хотел бы преобразовать все типы ссылок в единый формат, начиная с http://

http://google.com

Как я могу добавлять URL-адреса перед http:// с помощью Python?

2 5

2 ответа:

У 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, Вы должны отредактировать поле .netloc результирующего объекта перед вызовом .geturl().

Поскольку ParseResult является namedtuple, вы не можете редактировать его на месте, но должны создать новый объект.

PS:

Для Python3 это должно быть urllib.parse.urlparse

Для форматов, которые вы упоминаете в своем вопросе, вы можете сделать что-то очень простое, например:

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-адрес).