2015-06-01 37 views
5

Ecco quello che ho finora:Rimuovere tutti i stile, script e tag HTML da una pagina HTML

from bs4 import BeautifulSoup 

def cleanme(html): 
    soup = BeautifulSoup(html) # create a new bs4 object from the html data loaded 
    for script in soup(["script"]): 
     script.extract() 
    text = soup.get_text() 
    return text 
testhtml = "<!DOCTYPE HTML>\n<head>\n<title>THIS IS AN EXAMPLE </title><style>.call {font-family:Arial;}</style><script>getit</script><body>I need this text captured<h1>And this</h1></body>" 

cleaned = cleanme(testhtml) 
print (cleaned) 

Questo è al lavoro per rimuovere lo script

+1

Qual è la sua uscita prevista? –

risposta

5

Sembra che tu quasi avete. Devi anche rimuovere i tag html e il codice di stile CSS. Qui è la mia soluzione (ho aggiornato la funzione):

def cleanMe(html): 
    soup = BeautifulSoup(html) # create a new bs4 object from the html data loaded 
    for script in soup(["script", "style"]): # remove all javascript and stylesheet code 
     script.extract() 
    # get text 
    text = soup.get_text() 
    # break into lines and remove leading and trailing space on each 
    lines = (line.strip() for line in text.splitlines()) 
    # break multi-headlines into a line each 
    chunks = (phrase.strip() for line in lines for phrase in line.split(" ")) 
    # drop blank lines 
    text = '\n'.join(chunk for chunk in chunks if chunk) 
    return text 
1

Se si desidera una soluzione rapida e sporca si ca usa:

re.sub(r'<[^>]*?>', '', value) 

Per effettuare un equivalente di strip_tags in php. È quello che vuoi?

7

È possibile utilizzare decompose per rimuovere completamente i tag dal documento e il generatore stripped_strings per recuperare il contenuto del tag.

def clean_me(html): 
    soup = BeautifulSoup(html) 
    for s in soup(['script', 'style']): 
     s.decompose() 
    return ' '.join(soup.stripped_strings) 

>>> clean_me(testhtml) 
'THIS IS AN EXAMPLE I need this text captured And this' 
Problemi correlati