2010-12-12 11 views
5

Qualcuno ha qualche codice di esempio che illustra come utilizzare Python's Beautiful Soup per rimuovere tutti i tag html, ad eccezione di alcuni, da una stringa di testo?Utilizzo di Beautiful Soup per rimuovere i tag html da una stringa

Voglio mettere a nudo tutti i javascript e tag html tutto, tranne:

<a></a> 
<b></b> 
<i></i> 

E anche cose come:

<a onclick=""></a> 

Grazie per l'aiuto - non ho potuto trovare molto su internet per questo scopo.

risposta

8
import BeautifulSoup 

doc = '''<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is <i>paragraph</i> <a onclick="">one</a>.<p id="secondpara" align="blah">This is <i>paragraph</i> <b>two</b>.</html>''' 
soup = BeautifulSoup.BeautifulSoup(doc) 

for tag in soup.recursiveChildGenerator(): 
    if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
     print(tag) 

cede

<i>paragraph</i> 
<a onclick="">one</a> 
<i>paragraph</i> 
<b>two</b> 

Se si desidera solo il contenuto del testo, è possibile modificare print(tag)-print(tag.string).

Se si desidera rimuovere un attributo come onclick="" dal tag a, si potrebbe fare questo:

if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a','b','i'): 
    if tag.name=='a': 
     del tag['onclick'] 
    print(tag) 
+0

Grazie - un modo per rimuovere l'onclick = "" – ensnare

+0

add 'tag.attrs = [ ] 'prima di stampare per rimuovere tutti gli attributi. Se hai bisogno di più controllo, tag.attrs è solo una lista di coppie (nome, valore) con cui puoi giocare quando ne hai bisogno. – Spacedman

+0

Ehi, questo è stato davvero utile, grazie mille. – ensnare

Problemi correlati