J'essaie de supprimer tout le html/javascript en utilisant bs4, cependant, il ne se débarrasse pas de javascript. Je le vois toujours là avec le texte. Comment contourner cela?
J'ai essayé d'utiliser nltk
qui fonctionne bien cependant, clean_html
et clean_url
sera supprimé à l'avenir. Existe-t-il un moyen d'utiliser des soupes get_text
et obtenir le même résultat?
J'ai essayé de regarder ces autres pages:
BeautifulSoup get_text ne supprime pas toutes les balises et JavaScript
Actuellement, j'utilise les fonctions obsolètes de nltk.
[~ # ~] modifier [~ # ~]
Voici un exemple:
import urllib
from bs4 import BeautifulSoup
url = "http://www.cnn.com"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
print soup.get_text()
Je vois toujours ce qui suit pour 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();
});
Comment puis-je retirer le js?
Seules les autres options que j'ai trouvées sont:
https://github.com/aaronsw/html2text
Le problème avec html2text
est que c'est vraiment vraiment parfois lent, et crée un décalage notable, ce qui était une chose avec laquelle nltk était toujours très bon.
Basé en partie sur Puis-je supprimer des balises de script avec 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)
Pour éviter les erreurs d'encodage à la fin ...
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'))