¿Se pueden eliminar las etiquetas de script y todos sus contenidos de HTML con BeautifulSoup, o tengo que usar expresiones regulares o algo más?¿Puedo eliminar las etiquetas de script con BeautifulSoup?
Respuesta
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> [s.extract() for s in soup('script')]
>>> soup
baba
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')]
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.
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
Descomponer no elimina el contenido de las etiquetas de secuencia de comandos, solo elimina las etiquetas. –
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
- 1. BeautifulSoup etiquetas anidadas
- 2. ¿Cómo puedo quitar etiquetas de comentarios de HTML usando BeautifulSoup?
- 3. Eliminar <script> etiquetas usando jQuery
- 4. obtener datos de las etiquetas meta usando BeautifulSoup
- 5. eliminar ciertos atributos de las etiquetas HTML
- 6. ¿Puedo cambiar el comportamiento de BeautifulSoup con respecto a la conversión de etiquetas XML a minúsculas?
- 7. ¿Cómo eliminar caracteres peligrosos (es decir, etiquetas de script)?
- 8. RegExp, Eliminar puntos en las etiquetas
- 9. Eliminar todas las etiquetas de javascript y las etiquetas de estilo de html con python y el módulo lxml
- 10. Agregar/eliminar etiquetas xml usando un script bash
- 11. Encontrar una etiqueta específica con BeautifulSoup
- 12. Problema con la expresión regular para eliminar las etiquetas HTML
- 13. BeautifulSoup innerhtml?
- 14. Eliminar el atributo de estilo de las etiquetas HTML
- 15. ¿Cómo puedo tomar CData de BeautifulSoup
- 16. Analizando tablas HTML con BeautifulSoup
- 17. ¿podemos usar xpath con BeautifulSoup?
- 18. ¿Cómo eliminar todas las etiquetas después de cierta etiqueta?
- 19. Impedir que BeautifulSoup convierta mis etiquetas XML en minúsculas
- 20. ¿Cómo puedo eliminar etiquetas HTML de una cadena ColdFusion?
- 21. Cerrando las etiquetas XML abiertas con regex
- 22. problema de selector de jquery con etiquetas de script
- 23. Cómo eliminar las etiquetas HTML, no el contenido en Vim
- 24. Django plantilla de filtro de eliminar las etiquetas HTML
- 25. Buscar y reemplazar en HTML con BeautifulSoup
- 26. JQuery: Eliminar eventos "OnClick" de las etiquetas 'a'
- 27. usando pitón, eliminar las etiquetas HTML/formato de una cadena
- 28. eliminar las etiquetas html de la cadena usando Java
- 29. Eliminar etiquetas XML vacías
- 30. Obtenga el documento DOCTYPE con BeautifulSoup
¿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
@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 –
@ FábioDiniz ¿Cómo sería? Extraigo algo como: '' baba ' '? ¿Es lo mismo? – user2883071