2014-04-02 13 views
29

Sto provando a rimuovere tutto il codice html/javascript usando bs4, tuttavia, non si sbarazza di javascript. Lo vedo ancora lì con il testo. Come posso aggirare questo?BeatifulSoup4 get_text ha ancora javascript

Ho provato a utilizzare nltk che funziona correttamente tuttavia, clean_html e clean_url verranno rimossi in avanti. C'è un modo per usare le minestre get_text e ottenere lo stesso risultato?

ho provato guardando queste altre pagine:

BeautifulSoup get_text does not strip all tags and JavaScript

Attualmente sto usando le funzioni deprecate del NLTK.

EDIT

Ecco un esempio:

import urllib 
from bs4 import BeautifulSoup 

url = "http://www.cnn.com" 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
print soup.get_text() 

ho ancora vedere il seguente per la CNN:

$j(function() { 
"use strict"; 
if (window.hasOwnProperty('safaripushLib') && window.safaripushLib.checkEnv()) { 
var pushLib = window.safaripushLib, 
current = pushLib.currentPermissions(); 
if (current === "default") { 
pushLib.checkPermissions("helloClient", function() {}); 
} 
} 
}); 

/*globals MainLocalObj*/ 
$j(window).load(function() { 
'use strict'; 
MainLocalObj.init(); 
}); 

Come posso togliere i js?

Solo altre opzioni che ho trovato sono:

https://github.com/aaronsw/html2text

Il problema con html2text è che è veramente veramente lento, a volte, e crea ritardo notevole, che è una cosa NLTK era sempre molto buono con .

+0

Sarebbe di grande aiuto se potessimo vedere (una sezione del) html compresi javascript –

+0

Aggiunto un esempio. – KVISH

risposta

55

basato in parte su Can I remove script tags with BeautifulSoup?

import urllib 
from bs4 import BeautifulSoup 

url = "http://www.cnn.com" 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 

# kill all script and style elements 
for script in soup(["script", "style"]): 
    script.decompose() # rip it out 

# 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) 

print(text) 
+5

invece di 'script.extract()', è meglio usare 'script.decompose()' che elimina solo senza restituire l'oggetto tag. –

7

Per evitare errori di codifica, alla fine ...

import urllib 
from bs4 import BeautifulSoup 

url = url 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 

# kill all script and style elements 
for script in soup(["script", "style"]): 
    script.extract() # rip it out 

# 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) 

print(text.encode('utf-8')) 
Problemi correlati