Remplacer des espaces, c'est bien, mais je pourrais suggérer d'aller un peu plus loin pour gérer d'autres caractères hostiles aux URL, tels que des points d'interrogation, des apostrophes, des points d'exclamation, etc.
Notez également que le consensus général parmi les experts en référencement est que les tirets sont préférés aux soulignés dans les URL.
def urlify(s):
# Remove all non-word characters (everything except numbers and letters)
s = re.sub(r"[^\w\s]", '', s)
# Replace all runs of whitespace with a single dash
s = re.sub(r"\s+", '-', s)
return s
# Prints: I-cant-get-no-satisfaction"
print urlify("I can't get no satisfaction!")