web-dev-qa-db-fra.com

BeatifulSoup4 get_text a toujours javascript

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.

43
KVISH

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)
78
Hugh Bothwell

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'))
8
bumpkin