2010-05-25 11 views
2

A partir d'une entrée HTML comme ceci:Est-il possibile de modifier une valeur de lien avec Beautifulsoup sans recréer tout le lien?

<p> 
<a href="http://www.foo.com" rel="nofollow">this is foo</a> 
<a href="http://www.bar.com" rel="nofollow">this is bar</a> 
</p> 

est-il possible de modifier les valeurs de nœud <a> (« ce i foo » et « ceci est bar ») en ajoutant le suffixe « analysée » à la valeur sans recréer le lien entier?
Le résultat doivent ressembler à ceci:

<p> 
<a href="http://www.foo.com" rel="nofollow">this is foo_PARSED</a> 
<a href="http://www.bar.com" rel="nofollow">this is bar_PARSED</a> 
</p> 

et le code devrait être quelque chose comme:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
for link_tag in soup.findAll('a'): 
    link_tag.string = link_tag.string + '_PARSED' #This obviously does not work 

Répondre

3

Si je vous comprends bien, vous y êtes presque. Changer votre code à

for link_tag in soup.findAll('a'): 
    link_tag.string = link_tag.string + '_PARSED' 
html_out = soup.renderContents() 

Si nous imprimons html_out nous obtenons:

>>> print html_out 
<p> 
<a href="http://www.foo.com" rel="nofollow">this is foo_PARSED</a> 
<a href="http://www.bar.com" rel="nofollow">this is bar_PARSED</a> 
</p> 

que je pense est ce que vous vouliez.

+0

link_tag.string = chaîne_loc.string + '_PARSED' ne fonctionne pas. – systempuntoout

+0

@systempuntoout, êtes-vous sûr? Cela fonctionne magnifiquement pour moi. J'utilise la version 3.0.8.1. –

+0

J'utilisais 3.07a téléchargé avec DarwinPort. Avec 3.08 fonctionne comme un charme :) merci. – systempuntoout