As tags de script e todo o seu conteúdo podem ser removidos do HTML com o BeautifulSoup, ou devo usar Expressões regulares ou outra coisa?
Respostas:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>> s.extract()
>>> soup
baba
[s.extract() for s in soup(['iframe', 'script'])]
Observe que para usar várias tags, o parâmetro deve ser uma lista
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
:? É o mesmo?
<html><head></head><body><p>baba</p></body></html>
Resposta atualizada para quem precisa para referência futura: A resposta correta é.
decompose()
Você pode usar maneiras diferentes, mas decompose
funciona no local.
Exemplo 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>'
Muito útil para se livrar de detritos como 'script', 'img' e assim por diante.
decompose
e extract
é que o último retorna a coisa que foi removida, enquanto o primeiro apenas o destrói. Portanto, esta é a resposta mais precisa para a pergunta, mas os outros métodos funcionam.
remove
conteúdo. Freqüentemente usado para limpar HTML de tags e formatação desnecessárias.
Conforme declarado na ( documentação oficial ), você pode usar o extract
método para remover todas as subárvores que correspondem à pesquisa.
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]