Python - come trasformare una stringa in url

Semplici sistemi di trasformazione del testo in url in poche righe di codice


Python - come trasformare una stringa in url

Da stringa a url in Python

Trasformare del testo in url in poche righe di codice

A volte capita di dover trasformare una frase di testo in un url. In Python è una trasformazione semplice da fare e qui sotto trovi due possibili soluzioni.

Soluzione 1 - urllib

Se non hai particolari esigenze allora la libreria urllib risolve tutti i tuoi problemi e con tre righe di codice hai fatto:


import urllib.parse

query = "Hellö Wörld@Python"
urllib.parse.quote(query)

Output: Hell%C3%B6%20W%C3%B6rld%40Python

Non molto leggibile ma facile da ottenere!

Considera che la funzione quote() di default considera il carattere / sicuro quindi non lo modifica. Ci sono tuttavia altre funzioni urllib o argomenti da passare come parametro per ottenere risultati migliori perciò ti consiglio di dare un'occhiata alla documentazione.

Soluzione 2 - maggiore attenzione ai dettagli

Se invece preferisci che l'url risulti il più possibile leggibile allora ti consiglio di aggiungere qualche riga di codice in più:

Per prima cosa trasforma il testo in minuscolo:


s = s.lower()

Poi rimuovi ogni carattere alfanumerico ad eccezione degli underscore:


s = re.sub(r"[^\w]", " ", s)

A questo punto trasforma tutti gli spazi multipli in uno solo e rimuovi quelli all'inizio ed alla fine della frase, poi trasformali in "-":


s = re.sub(" +", " ", s)
s = s.strip()
s = s.replace(" ", "-")

Ciò che rimane, di cui fare attenzione, sono le lettere accentate presenti in alcune lingue come l'italiano (à. è, é, ì, ò, ù) ma non solo (ä, ö...). In questo caso torna nuovamente comoda la libreria urllib così da sistemare ogni altro possibile carattere imprevisto mantenendo però una struttura dell'url più leggibile. Lo script finale risulta quindi:


import  re
import urllib.quote

def  strToUrl(s):
    ''' return url from string '''
    s = s.lower()
    s = re.sub(r"[^\w]", " ", s)
    s = re.sub(" +", " ", s)
    s = s.strip()
    s = s.replace(" ", "-")
    s = urllib.parse.quote(s)
    return  s

Input: " Questa url è più leggibile dell'altra - $23.500,76 "
Output: questa-url-%C3%A8-pi%C3%B9-leggibile-dell-altra-23-500-76

Ovviamente anche in questo caso si possono aggiungere controlli maggiori come per esempio il replace delle lettere accentate con quelle non accentate e lo stesso per quanto riguarda altri caratteri speciali.

Se ti è piaciuto questo articolo e vorresti leggerne altri quando disponibili, considera di aggiungere il Feed RSS in un aggregatore di notizie come Feedly oppure salva questo sito tra i preferiti e torna quando vuoi 👋


Author: Fantantonio 

Date: 24/04/2022

Categories: devtips

Tags: python string url urllib re