Python - come trasformare una stringa in url
Semplici sistemi di trasformazione del testo in url in poche righe di codice

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.
Author: Fantantonio
Date: 24/04/2022
Categories: devtips