В моем приложении Django мне нужно получить имя хоста от реферера request.META.get('HTTP_REFERER')
вместе с его протоколом, чтобы из таких URL-адресов, как:
- https://docs.google.com/spreadsheet/ccc?key=blah-blah-blah-blah#gid=1
- /programming/1234567/blah-blah-blah-blah
- http://www.example.com
- https://www.other-domain.com/whwhat/blah/blah/?v1=0&v2=blah+blah ...
Я должен получить:
- https://docs.google.com/
- https://stackoverflow.com/
- http://www.example.com
- https://www.other-domain.com/
Я просмотрел другие связанные вопросы и нашел о urlparse, но это не помогло
>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'
/
в третьем примереhttp://www.domain.com
, но я думаю , что это может быть недостатком вопрос, а не ответ.urlparse.urlparse()
возвращает именованный как кортеж результат; Вы могли бы использовать{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
для удобства чтения.netloc
не является доменом: попробуйтеurlparse.urlparse('http://user:pass@example.com:8080')
и найдите, что дает такие части, как'user:pass@'
и':8080'
from urllib.parse import urlparse
https://github.com/john-kurkowski/tldextract
Это более подробная версия urlparse. Он обнаруживает домены и субдомены для вас.
Из их документации:
ExtractResult
это именованный кортеж, поэтому просто получить доступ к нужным вам частям.источник
Python3 с использованием urlsplit :
источник
Чисто строковые операции :):
Вот и все, ребята.
источник
url.split("//")[-1].split("/")[0].split('?')[0]
:-))источник
from urllib.parse import urlparse
.если вы думаете, что ваш URL действителен, то это будет работать все время
источник
split
неверно, больше нет косых черт для разделения.Что-то не так с чистыми строковыми операциями:
Если вы предпочитаете добавить косую черту, расширьте этот скрипт примерно так:
Это, вероятно, можно немного оптимизировать ...
источник
Вот немного улучшенная версия:
Вывод
Скрипка: https://pyfiddle.io/fiddle/23e4976e-88d2-4757-993e-532aa41b7bf0/?i=true
источник
Это немного тупо, но использует
urlparse
в обоих направлениях:этот нечетный
("",) * 4
бит, потому что urlparse ожидает последовательность точноlen(urlparse.ParseResult._fields)
= 6источник
Я знаю, что это старый вопрос, но я тоже столкнулся с ним сегодня. Решил это с помощью одной строки:
источник
Стандартная библиотечная функция urllib.parse.urlsplit () - это все, что вам нужно. Вот пример для Python3:
источник
Это может быть решено с помощью re.search ()
источник
получить домен / имя хоста и происхождение *
*
Origin
используется вXMLHttpRequest
заголовкахисточник
Вы можете просто использовать urljoin с относительным корнем '/' в качестве второго аргумента:
источник
Если он содержит менее 3 косых черт, значит, он у вас есть, а если нет, то мы можем найти вхождение между ними:
источник