Я полностью уважаю использование Beautiful Soup для получения визуализированного контента, но это может быть не идеальный пакет для получения визуализированного контента на странице.
У меня была похожая проблема с получением визуализированного контента или видимого контента в обычном браузере. В частности, у меня было много, возможно, нетипичных случаев для работы с таким простым примером ниже. В этом случае не отображаемый тег вложен в тег стиля и не виден во многих браузерах, которые я проверял. Существуют и другие варианты, такие как определение отображения тега класса для none. Затем, используя этот класс для div.
<html>
<title> Title here</title>
<body>
lots of text here <p> <br>
<h1> even headings </h1>
<style type="text/css">
<div > this will not be visible </div>
</style>
</body>
</html>
Одно из опубликованных выше решений:
html = Utilities.ReadFile('simple.html')
soup = BeautifulSoup.BeautifulSoup(html)
texts = soup.findAll(text=True)
visible_texts = filter(visible, texts)
print(visible_texts)
[u'\n', u'\n', u'\n\n lots of text here ', u' ', u'\n', u' even headings ', u'\n', u' this will not be visible ', u'\n', u'\n']
Это решение, безусловно, имеет приложения во многих случаях и в целом выполняет работу достаточно хорошо, но в HTML-коде, размещенном выше, оно сохраняет текст, который не отображается. После поиска SO было найдено несколько решений BeautifulSoup get_text не удаляет все теги и JavaScript , а здесь Отображает HTML в простой текст, используя Python
Я испробовал оба эти решения: html2text и nltk.clean_html и был удивлен результатами синхронизации, так что я подумал, что они гарантируют ответ для потомков. Конечно, скорости сильно зависят от содержимого данных ...
Один ответ здесь @Helge был об использовании nltk всех вещей.
import nltk
%timeit nltk.clean_html(html)
was returning 153 us per loop
Очень хорошо работало, чтобы вернуть строку с визуализированным html. Этот модуль nltk был быстрее, чем даже html2text, хотя, возможно, html2text более устойчив.
betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop