2010-05-08 13 views
3

Je souhaite supprimer les URL d'une chaîne et les remplacer par leurs titres du contenu d'origine.Python: remplace les URLs par les noms de titre d'une chaîne

Par exemple:

mystring = "Ah I like this site: http://www.stackoverflow.com. Also I must say I like http://www.digg.com" 

sanitize(mystring) # it becomes "Ah I like this site: Stack Overflow. Also I must say I like Digg - The Latest News Headlines, Videos and Images" 

Pour remplacer url avec le titre, je l'ai écrit snipplet:

#get_title: string -> string 
def get_title(url): 
    """Returns the title of the input URL""" 

    output = BeautifulSoup.BeautifulSoup(urllib.urlopen(url)) 
    return output.title.string 

Je dois en quelque sorte d'appliquer cette fonction aux chaînes où il attrape les urls et convertis aux titres via get_title.

+1

et votre question? – msw

+0

J'ai mis à jour la question, désolé :) – Hellnar

Répondre

3

est ici une question avec des informations pour valider une url en Python: How do you validate a URL with a regular expression in Python?

Module

urlparse est probablement votre meilleur pari. Vous devrez encore décider ce qui constitue une url valide dans le contexte de votre demande.

Pour vérifier la chaîne d'une URL, vous devez parcourir chaque mot de la chaîne, puis le remplacer par l'intitulé valide.

exemple de code (vous devez écrire valid_url):

def sanitize(mystring): 
    for word in mystring.split(" "): 
    if valid_url(word): 
     mystring = mystring.replace(word, get_title(word)) 
    return mystring 
2

Vous pouvez probablement résoudre ce en utilisant des expressions régulières et la substitution (re.sub accepte une fonction, qui sera transmis l'objet de match pour chaque occurence et retourne la chaîne pour le remplacer par):

url = re.compile("http:\/\/(.*?)/") 
text = url.sub(get_title, text) 

Le chose difficile est de créer une expression rationnelle qui correspond à une URL, pas plus, pas moins.

+0

1. 'get_title()' devrait accepter MatchObject (pas seulement une chaîne). 2. Django utilise quelque chose comme r'https?: // [^ \ t \ n \ r] + 'pour lier le texte – jfs