69 votes

Python : Obtenir des sections de chemin d'accès aux URL

Comment obtenir des sections de chemin spécifiques à partir d'une url ? Par exemple, je veux une fonction qui fonctionne sur ceci :

http://www.mydomain.com/hithere?image=2934

et renvoie "hithere"

ou fonctionne sur ce point :

http://www.mydomain.com/hithere/something/else

et renvoie la même chose ("hithere")

Je sais que cela utilisera probablement urllib ou urllib2 mais je n'arrive pas à trouver dans la documentation comment obtenir seulement une section du chemin.

2 votes

La syntaxe de l'URL est quelque chose comme : scheme://domain:port/path?query_string#fragment_id Donc, "hithere" est l'ensemble de path dans le premier cas et 1 section de celui-ci dans le second. Il suffit de l'urlparser pour que 'hithere' devienne path.split('/')[1].

1 votes

Ne serait-ce pas path.split('/')[0] ? (le premier élément de la liste)

2 votes

Non, car le chemin commence par un '/' et [0] est donc une chaîne vide. C'est-à-dire que ideone.com/hJRxk

2voto

JavaScriptDude Points 140

Voici un exemple utilisant urlparse et rpartition .

# Python 2x:
from urlparse import urlparse
# Python 3x:
from urllib.parse import urlparse

def printPathTokens(full_url):
    print('printPathTokens() called: %s' % full_url)

    p_full = urlparse(full_url).path

    print(' . p_full url: %s' % p_full)

    # Split the path using rpartition method of string
    # rpartition "returns a tuple containing the part the before separator,
    # argument string and the part after the separator" 
    (rp_left, rp_match, rp_right) = p_full.rpartition('/')

    if rp_match == '': # returns the rpartition separator if found
        print(' . No slashes found in path')
    else:
        print(' . path to last resource: %s' % rp_left)
        if rp_right == '': # Ended with a slash
            print(' . last resource: (none)')
        else:
            print(' . last resource: %s' % (rp_right))

printPathTokens('http://www.example.com/temp/something/happen/index.html')
# Output:
# printPathTokens() called: http://www.example.com/temp/something/happen/index.html
# . p_full url: /temp/something/happen/index.html
# . path to last resource: /temp/something/happen
# . last resource: index.html

printPathTokens('http://www.example.com/temp/something/happen/')
# Output:
# printPathTokens() called: http://www.example.com/temp/something/happen/
# . p_full url: /temp/something/happen/
# . path to last resource: /temp/something/happen
# . last resource: (none)

printPathTokens('http://www.example.com/temp/something/happen')
# Output:
# printPathTokens() called: http://www.example.com/temp/something/happen
# . p_full url: /temp/something/happen
# . path to last resource: /temp/something
# . last resource: happen

0voto

user3725732 Points 3

Une combinaison de urlparse y os.path.split fera l'affaire. Le script suivant stocke toutes les sections d'une url dans une liste, à l'envers.

import os.path, urlparse

def generate_sections_of_url(url):
    path = urlparse.urlparse(url).path
    sections = []; temp = "";
    while path != '/':
        temp = os.path.split(path)
        path = temp[0]
        sections.append(temp[1])
    return sections

Cela renverrait : ["else", "something", "hithere"]

-2voto

kder Points 127
from urllib.parse import urlparse

o = urlparse('http://www.example.com/p1/p2/p3').path

print(o)

sortie :

/p1/p2/p3

fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X