BeatifulSoup4 get_text все еще имеет javascript
Я пытаюсь удалить все html/javascript, используя bs4, однако он не избавляется от javascript. Я все еще вижу это там с текстом. Как я могу обойти это?
Я попытался использовать nltk
, который отлично работает, но clean_html
и clean_url
будут удалены. Есть ли способ использовать супы get_text
и получить тот же результат?
Я пробовал смотреть на другие страницы:
BeautifulSoup get_text не разделяет все теги и JavaScript
В настоящее время я использую устаревшие функции nltk.
ИЗМЕНИТЬ
Вот пример:
import urllib
from bs4 import BeautifulSoup
url = "http://www.cnn.com"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
print soup.get_text()
Я все еще вижу для 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();
});
Как удалить js?
Доступны только другие параметры:
https://github.com/aaronsw/html2text
Проблема с html2text
заключается в том, что она действительно очень медленная время от времени и создает заметное отставание, что является одной вещью, с которой nltk всегда был очень хорош.
Ответы
Ответ 1
Основано частично на Могу ли я удалить теги сценария с 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)
Ответ 2
Чтобы предотвратить ошибки кодирования в конце...
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'))