2014-02-10 4 views
3

Я работаю с приложением, которое возвращает URL-адреса, написанные с помощью Flask. Я хочу, чтобы URL-адрес, отображаемый пользователю, был как можно более чистым, поэтому я хочу удалить из него http: //. Я посмотрел и нашел библиотеку urlparse, но не смог найти примеров того, как это сделать. Какой был бы лучший способ сделать это, и если urlparse будет излишним, есть ли более простой способ? Просто удалил бы подстроку «http: //» из URL-адреса, просто используя обычные инструменты разбора строк, быть плохой практикой или вызывать проблемы?Как удалить схему из url в Python?

ответ

5

Я не думаю, что urlparse предлагает для этого один метод или функцию. Это, как я хотел бы сделать это:

from urlparse import urlparse 

url = 'HtTp://stackoverflow.com/questions/tagged/python?page=2' 

def strip_scheme(url): 
    parsed = urlparse(url) 
    scheme = "%s://" % parsed.scheme 
    return parsed.geturl().replace(scheme, '', 1) 

print strip_scheme(url) 

Выход:

stackoverflow.com/questions/tagged/python?page=2 

Если вы хотите использовать (только) простой строки синтаксического анализа, вам придется иметь дело с http[s], и, возможно, другие схемы сам. Кроме того, это управляет странным корпусом схемы.

0

Если вы используете эти программные средства, а не используете замену, я предлагаю, чтобы urlparse воссоздал URL-адрес без схемы.

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

# py2/3 compatibility 
try: 
    from urllib.parse import urlparse, ParseResult 
except ImportError: 
    from urlparse import urlparse, ParseResult 


def strip_scheme(url): 
    parsed_result = urlparse(url) 
    return ParseResult('', *parsed_result[1:]).geturl() 

Вы можете удалить любой компонент parseedresult, просто заменив ввод пустой строкой.

Важно отметить, что существует функциональная разница между этим ответом и ответом @Lukas Graf. Наиболее вероятным функциональным отличием является то, что компонент «//» URL-адреса не является технически схемой, поэтому этот ответ сохранит его, тогда как он останется здесь.

>>> Lukas_strip_scheme('https://yoman/hi?whatup') 
'yoman/hi?whatup' 
>>> strip_scheme('https://yoman/hi?whatup') 
'//yoman/hi?whatup' 
Смежные вопросы