2010-08-27 11 views
3

Je suis nouveau sur python et j'utilise BeautifulSoup pour analyser un site Web, puis extraire des données. J'ai le code suivant:Supprimer des balises de HTML analysé avec BeautifulSoup

for line in raw_data: #raw_data is the parsed html separated into smaller blocks 
    d = {} 
    d['name'] = line.find('div', {'class':'torrentname'}).find('a') 
    print d['name'] 

<a href="/ubuntu-9-10-desktop-i386-t3144211.html"> 
<strong class="red">Ubuntu</strong> 9.10 desktop (i386)</a> 

Normalement, je serais extrait mesure 'bureau Ubuntu 9.10 (i386)' en écrivant:

d['name'] = line.find('div', {'class':'torrentname'}).find('a').string 

mais en raison des fortes balises html, il retourne Aucun. Existe-t-il un moyen d'extraire les tags forts, puis d'utiliser .string ou existe-t-il un meilleur moyen? J'ai essayé d'utiliser la fonction extract() de BeautifulSoup mais je n'ai pas réussi à l'obtenir. Edit: Je viens de me rendre compte que ma solution ne fonctionne pas s'il y a deux ensembles de tags forts car l'espace entre les mots est omis. Quel serait un moyen de résoudre ce problème?

+0

liés: http://stackoverflow.com/questions/598817/python-html-removal/599080 # 599080 – jfs

Répondre

3

Utilisez la propriété ".text":

d['name'] = line.find('div', {'class':'torrentname'}).find('a').text 

Ou faire une jointure sur findAll (text = True):

anchor = line.find('div', {'class':'torrentname'}).find('a') 
d['name'] = ''.join(anchor.findAll(text=True)) 
+0

Cela ne fonctionne pas. Il ne conserve pas les espaces dans un exemple comme celui-ci: Ubuntu Linux. Il sort comme UbuntuLinux. – FlowofSoul

+0

J'ai mis à jour la réponse avec une option supplémentaire. –

+0

Merci beaucoup, cela fonctionne très bien! Pourriez-vous expliquer comment fonctionne cette deuxième ligne de code? – FlowofSoul