2012-07-17 3 views
2

Je dispose d'un fichier html qui ressemble à quelque chose semblable à ceci:Comment extraire la valeur d'attribut dans une structure de tag imbriquée en utilisant beautifulsoup?

<html> 
... 
<li class="not a user"> </li> 
<li class="user"> 
<a href="abs" ...> </a> 
</li> 
<li class="user"> 
<a href="bss" ...> </a> 
</li> 
... 
</html> 

compte tenu de l'entrée ci-dessus que je veux analyser les balises li class = « user » et obtenir la valeur des années href comme sortie. est-ce possible en utilisant beautifulsoup en python ???

ma solution était:

data="the above html code snippet" 
soup=BeautifulSoup(data) 
listset=soup("li","user") 
for list in listset: 
    attrib_value=[a['href'] for a in list.findAll('a',{'href':True})] 

i ont de toute évidence une erreur quelque part que ce ne répertorie que la valeur d'attribut pour href de la dernière balise d'ancrage.

+0

pourquoi êtes-vous la mise en attrib_value maintes et maintes fois sur chaque boucle? que faites-vous avec chaque itération? –

+0

le problème est que je continuais réaffectant à chaque itération quand je voulais une liste de valeurs d'attributs! : P – abhixec

Répondre

2

Votre code est très bien. Il y a trois éléments dans listset - et attrib_value obtient surchargées dans chaque itération de la boucle, donc à la fin du programme, il ne contient que les valeurs href du dernier élément de listset, qui est bss.

Essayez plutôt de garder toutes les valeurs:

attrib_value += [a['href'] for a in list.findAll('a',{'href':True})] 

et initialiser attrib_value à la liste vide avant que la boucle (attrib_value = []).

+0

ah ... thankssssss beaucoup .. Je savais que je manque quelque chose :) – abhixec

+0

Vous êtes les bienvenus - bonne chance. – Ansari

Questions connexes