Dans mon application Django, j'ai besoin d'obtenir le nom d'hôte du référent request.META.get('HTTP_REFERER')
avec son protocole afin que des URL telles que:
- 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/whatever/blah/blah/?v1=0&v2=blah+blah ...
Je devrais avoir:
- https://docs.google.com/
- https://stackoverflow.com/
- http://www.example.com
- https://www.other-domain.com/
J'ai examiné d'autres questions connexes et j'ai trouvé sur urlparse, mais cela n'a pas fonctionné depuis
>>> urlparse(request.META.get('HTTP_REFERER')).hostname
'docs.google.com'
/
au troisième exemplehttp://www.domain.com
, mais je pense que cela pourrait être une lacune de la question, pas de la réponse.urlparse.urlparse()
retourne un résultat de type "nommé"; vous pouvez utiliser{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)
pour la lisibilité.netloc
n'est pas le domaine: essayez deurlparse.urlparse('http://user:[email protected]:8080')
trouver que cela donne des parties comme'user:pass@'
et':8080'
from urllib.parse import urlparse
https://github.com/john-kurkowski/tldextract
Il s'agit d'une version plus détaillée d'urlparse. Il détecte les domaines et sous-domaines pour vous.
De leur documentation:
ExtractResult
est un namedtuple, il est donc simple d'accéder aux parties souhaitées.la source
Python3 utilisant urlsplit :
la source
Opérations de chaîne pure :):
C'est tout, les gars.
la source
url.split("//")[-1].split("/")[0].split('?')[0]
:-))la source
from urllib.parse import urlparse
.si vous pensez que votre URL est valide, cela fonctionnera tout le temps
la source
split
est faux, il n'y a plus de barres obliques à diviser.Y a-t-il quelque chose qui ne va pas avec les opérations sur chaînes pures:
Si vous préférez ajouter une barre oblique à la fin, étendez ce script un peu comme ceci:
Cela peut probablement être un peu optimisé ...
la source
Voici une version légèrement améliorée:
Production
Violon: https://pyfiddle.io/fiddle/23e4976e-88d2-4757-993e-532aa41b7bf0/?i=true
la source
C'est un peu obtus, mais utilise
urlparse
dans les deux sens:ce
("",) * 4
bit impair est dû au fait que urlparse attend une séquence d' exactementlen(urlparse.ParseResult._fields)
= 6la source
Je sais que c'est une vieille question, mais moi aussi je l'ai rencontrée aujourd'hui. Résolu cela avec un one-liner:
la source
La fonction de bibliothèque standard urllib.parse.urlsplit () est tout ce dont vous avez besoin. Voici un exemple pour Python3:
la source
Cela pourrait être résolu par re.search ()
la source
pour obtenir le domaine / nom d'hôte et l'origine *
*
Origin
est utilisé dans les en-XMLHttpRequest
têtesla source
Vous pouvez simplement utiliser urljoin avec la racine relative '/' comme deuxième argument:
la source
Si elle contient moins de 3 barres obliques, vous l'avez et sinon, nous pouvons trouver l'occurrence entre elles:
la source