2011-03-13 14 views
10

Estoy usando python + BeautifulSoup para analizar un documento HTML.¿Cómo cambiar el nombre de la etiqueta con BeautifulSoup?

Ahora necesito reemplazar todos los elementos <h2 class="someclass"> en un documento HTML, con <h1 class="someclass">.

¿Cómo puedo cambiar el nombre de la etiqueta, sin cambiar nada más en el documento?

Respuesta

14

No sé cómo se está accediendo tag pero las siguientes obras para mí:

import BeautifulSoup 

if __name__ == "__main__": 
    data = """ 
<html> 
<h2 class='someclass'>some title</h2> 
<ul> 
    <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li> 
    <li>Aliquam tincidunt mauris eu risus.</li> 
    <li>Vestibulum auctor dapibus neque.</li> 
</ul> 
</html> 

    """ 
    soup = BeautifulSoup.BeautifulSoup(data) 
    h2 = soup.find('h2') 
    h2.name = 'h1' 
    print soup 

salida de print soup comando es:

<html> 
<h1 class='someclass'>some title</h1> 
<ul> 
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li> 
<li>Aliquam tincidunt mauris eu risus.</li> 
<li>Vestibulum auctor dapibus neque.</li> 
</ul> 
</html> 

Como puede ver, h2 se convirtió en h1. Y nada más en el documento cambió. Estoy usando Python 2.6 y BeautifulSoup 3.2.0.

Si usted tiene más de un h2 y desea cambiar a todos ellos, se puede hacer simple:

soup = BeautifulSoup.BeautifulSoup(your_data) 
while True: 
    h2 = soup.find('h2') 
    if not h2: 
     break 
    h2.name = 'h1' 
+0

no sé por qué no me ha funcionado antes. Gracias por la respuesta. – daphshez

0

De BeautifulSoup docs

from BeautifulSoup import BeautifulSoup, Tag 
soup = BeautifulSoup("<h2 class="someclass">TEXTHERE</h2>") 
tag = Tag(soup, "h1", [("class", "someclass")]) 
tag.insert(0, "TEXTHERE") 
soup.h2.replaceWith(tag) 
print soup 
# <h1 class="someclass">TEXTHERE</h1> 
+0

creo que esto eliminará todo el contenido de la etiqueta h2 Solo quiero reemplazar el nombre de la etiqueta y dejar todo lo demás intacto. – daphshez

1

Es sólo:

tag.name = 'new_name' 
Cuestiones relacionadas