I tag di script e tutto il loro contenuto possono essere rimossi dall'HTML con BeautifulSoup o devo usare espressioni regolari o qualcos'altro?
Risposte:
>>> 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'])]
Nota che per usare più tag, il parametro deve essere un elenco
'<script class="blah">a</script>baba<script id="blahhhh">b</script>'
? È lo stesso?
<html><head></head><body><p>baba</p></body></html>
Risposta aggiornata per coloro che potrebbero aver bisogno di riferimenti futuri: la risposta corretta è.
decompose()
Puoi usare modi diversi ma decompose
funziona sul posto.
Utilizzo di esempio:
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>'
Abbastanza utile per sbarazzarsi di detriti come "script", "img" e così via.
decompose
e extract
è che quest'ultimo restituisce la cosa che è stata rimossa, mentre la prima la distrugge. Quindi questa è la risposta più precisa alla domanda, ma gli altri metodi funzionano.
remove
contenuti. Spesso utilizzato per pulire l'HTML da tag e formattazione non necessari.
Come indicato nella ( documentazione ufficiale ) è possibile utilizzare il extract
metodo per rimuovere tutta la sottostruttura che corrisponde alla ricerca.
import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]