2011-04-08 13 views

Respuesta

110
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml') 
>>> [s.extract() for s in soup('script')] 
>>> soup 
baba 
+0

¿Cuál es la mejor manera de encadenar etiquetas adicionales para eliminar? En este momento funciona si repito el comando uno después de otro, con [s.extract() para s en soup ('script')] luego [s.extract() para s en soup ('iframe')] y así sucesivamente , pero no si los encadené como [s.extract() para s en sopa ('iframe', 'script')]. – Ila

+6

@Ali Debería usar '[s.extract() para s en soup (['iframe', 'script'])]' Tenga en cuenta que para usar varias etiquetas, el parámetro debe ser una lista –

+0

@ FábioDiniz ¿Cómo sería? Extraigo algo como: '' baba ' '? ¿Es lo mismo? – user2883071

12

Como se indica en la (official documentation), puede utilizar el método extract para eliminar todo el subárbol que coincida con la búsqueda.

import BeautifulSoup 
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>") 
[x.extract() for x in a.findAll('script')] 
10

respuesta actualizada para los que podría necesitar para futuras referencias: La respuesta correcta es. decompose() Puede usar diferentes formas, pero decompose funciona en el lugar.

Ejemplo de uso:

soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>') 
soup.i.decompose() 
print str(soup) 
#prints '<p>This is a slimy text and</p>' 

muy útil para deshacerse de los detritus como 'guión', 'img' así y así sucesivamente.

+1

La diferencia entre 'decompose' y' extract' es que este último devuelve lo que se eliminó, mientras que el primero simplemente lo destruye. Esta es la respuesta más precisa a la pregunta, pero los otros métodos sí funcionan. – Mike

+0

Descomponer no elimina el contenido de las etiquetas de secuencia de comandos, solo elimina las etiquetas. –

+0

Estoy de acuerdo con sus dos comentarios. Es por eso que dije la respuesta correcta según OP que era 'eliminar 'contenido. A menudo se usa para limpiar HTML de etiquetas y formatos innecesarios. – Vangel

Cuestiones relacionadas