Analyser les URI personnalisés avec urlparse (Python)
Mon application crée personnalisée Uri (ou Url?) pour identifier les objets et de les résoudre. Le problème est que Python urlparse module refuse à analyser inconnu schémas d'URL comme il l'analyse http.
Si je ne réglez pas urlparse de uses_* listes-je obtenir ceci:
>>> urlparse.urlparse("qqqq://base/id#hint")
('qqqq', '', '//base/id#hint', '', '', '')
>>> urlparse.urlparse("http://base/id#hint")
('http', 'base', '/id', '', '', 'hint')
Voici ce que je fais, et je me demande si il y a une meilleure façon de le faire:
import urlparse
SCHEME = "qqqq"
# One would hope that there was a better way to do this
urlparse.uses_netloc.append(SCHEME)
urlparse.uses_fragment.append(SCHEME)
Pourquoi il n'y a pas de meilleure façon de le faire?
source d'informationauteur u0b34a0f6ae
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est d'URI n'ont pas tous un format commun après le régime. Par exemple, mailto: les url ne sont pas structurés de la même chose que http: url.
Je voudrais utiliser les résultats de la première analyse, puis de synthétiser une url http et de l'analyser à nouveau:
Vous pouvez également enregistrer un gestionnaire personnalisé avec urlparse:
Cela va ajouter à votre schéma d'url pour les listes:
L'uri doit ensuite être traité comme http et renvoie correctement le chemin d'accès, le fragment, le nom d'utilisateur/mot de passe etc.
Il est aussi appelé bibliothèque furl qui vous donne le résultat que vous souhaitez:
La question semble être hors de date. Depuis, au moins, Python 2.7 il n'y a pas de problèmes.
Essayez de supprimer le régime entièrement, et de commencer avec la //netloc, c'est à dire:
Vous n'aurez pas le schéma du urlparse résultat, mais vous savez que le régime de toute façon.
Notez également que la version 2.6 de Python semble gérer cette url très bien (à part le fragment):
Vous pouvez utiliser yurl de la bibliothèque. Contrairement à purl ou rouler, il ne pas essayer de les corriger urlparse bugs. Il est de nouveau compatible avec la RFC 3986 de mise en œuvre.