2009-05-21 3 views
0

Auparavant, j'ai demandé this question et j'ai récupéré ce code exemple BeautifulSoup, qui, après une consultation locale, j'ai décidé d'aller avec.Spécification dynamique des étiquettes lors de l'utilisation de replaceWith dans Beautiful Soup

>>> from BeautifulSoup import BeautifulStoneSoup 
>>> html = """ 
... <config> 
... <links> 
... <link name="Link1" id="1"> 
... <encapsulation> 
... <mode>ipsec</mode> 
... </encapsulation> 
... </link> 
... <link name="Link2" id="2"> 
... <encapsulation> 
... <mode>udp</mode> 
... </encapsulation> 
... </link> 
... </links> 
... </config> 
... """ 
>>> soup = BeautifulStoneSoup(html) 
>>> soup.find('link', id=1) 
<link name="Link1" id="1"> 
<encapsulation> 
<mode>ipsec</mode> 
</encapsulation> 
</link> 
>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever') 
>>> soup.find('link', id=1) 
<link name="Link1" id="1"> 
<encapsulation> 
<mode>whatever</mode> 
</encapsulation> 
</link> 

Le seul problème avec cela est que l'exemple a une valeur d'étiquette hardcoded (dans ce cas, « mode »), et je dois être en mesure de spécifier une balise dans le spécifié balise « lien ». La substitution de variable simple ne semble pas fonctionner.

Répondre

2

Essayez getattr(soup.find('link', id=1), sometag) où vous avez maintenant une étiquette définitivement dans soup.find('link', id=1).mode-getattr est la façon Python pour obtenir un attribut dont le nom est tenu comme une variable de chaîne, après tout!

+0

Merci. Ça marche. –

0

Pas besoin d'utiliser getattr:

sometag = 'mode' 
result = soup.find('link', id=1).find(sometag) 
print result 
Questions connexes