Buscar y reemplazar en HTML con BeautifulSoup

Quiero usar BeautfulSoup para buscar y reemplazar con
. Sé cómo abrir con urllib2 y luego analizar para extraer todas las tags . Lo que quiero hacer es buscar y reemplazar la etiqueta de cierre con la etiqueta de cierre más la ruptura. Cualquier ayuda, muy apreciada.

EDITAR

Supongo que sería algo similar a:

 soup.findAll('a'). 

En la documentación, hay un:

 find(text="ahh").replaceWith('Hooray') 

Así que asumo que sería en la línea de:

 soup.findAll(tag = '').replaceWith(tag = '
')

Pero eso no funciona y la ayuda de python () no da mucho

Esto insertará una etiqueta
después del final de cada elemento ... :

 from BeautifulSoup import BeautifulSoup, Tag # .... soup = BeautifulSoup(data) for a in soup.findAll('a'): a.parent.insert(a.parent.index(a)+1, Tag(soup, 'br')) 

No puede usar soup.findAll(tag = '') porque BeautifulSoup no funciona en las tags finales por separado, ya que se consideran parte del mismo elemento.


Si desea colocar los elementos dentro de un elemento

como pregunta en un comentario, puede usar esto:

 for a in soup.findAll('a'): p = Tag(soup, 'p') #create a P element a.replaceWith(p) #Put it where the A element is p.insert(0, a) #put the A element inside the P (between 

and

)

Nuevamente, no creas

y

separado porque son parte de la misma cosa.

Supongamos que tiene un elemento que sabe que contiene las tags de marcado “br”; una forma de eliminar y reemplazar las tags “br” con una cadena diferente es la siguiente:

 originalSoup = BeautifulSoup("your_html_file.html") replaceString = ", " # replace each 
tag with ", " # Ex.

Hello
World

to

Hello, World

cleanSoup = BeautifulSoup(str(originalSoup).replace("
", replaceString))

Usted no reemplaza una etiqueta final; en BeautifulSoup, se trata de un modelo de objeto de documento como en un navegador, no en una cadena llena de HTML. Por lo tanto, no podría “reemplazar” una etiqueta final sin reemplazar también la etiqueta inicial.

Lo que desea hacer es insertar un nuevo elemento
inmediatamente después del elemento ... . Para hacerlo, deberá averiguar el índice del elemento dentro de su elemento primario e insertar el nuevo elemento justo después de ese índice. p.ej.

 soup= BeautifulSoup('blah blah blah') for link in soup.findAll('a'): br= Tag(soup, 'br') index= link.parent.contents.index(link) link.parent.insert(index+1, br) # soup now serialises to 'blah blah
blah'