Je suis complètement en respect à l'aide de Magnifiques Soupe pour obtenir des rendus de contenu, mais il peut ne pas être l'outil idéal pour acquérir le rendu du contenu sur une page.
J'ai eu un problème similaire pour obtenir de rendu de contenu, ou le contenu visible dans un navigateur type. En particulier, j'ai eu beaucoup de peut-être, les cas atypiques de travailler avec un exemple simple ci-dessous. Dans ce cas, le non affichables balise est imbriquée dans une balise style, et n'est pas visible dans la plupart des navigateurs que j'ai vérifié. D'autres variantes existent, tels que la définition d'une classe de la balise affichage de réglage à aucun. Ensuite, à l'aide de cette classe pour la 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>
Une solution posté ci-dessus est:
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']
Cette solution a certainement des applications dans de nombreux cas et fait le travail très bien en général, mais dans le code html affiché ci-dessus, il conserve le texte qui n'est pas rendu. Après recherche DONC un couple de solutions est venu ici BeautifulSoup get_text de ne pas supprimer toutes les balises et JavaScript et voici le Rendu HTML en texte brut à l'aide de Python
J'ai essayé les deux solutions suivantes: html2text et nltk.clean_html et a été surpris par le timing ainsi, les résultats de la pensée qu'ils justifiaient une réponse pour la postérité. Bien sûr, les vitesses dépendent fortement du contenu des données...
Une réponse de @Helge a propos de l'utilisation de nltk de toutes choses.
import nltk
%timeit nltk.clean_html(html)
was returning 153 us per loop
Il a vraiment bien travaillé pour renvoyer une chaîne de rendu html. Cette nltk module a été plus rapide que même html2text, mais peut-être html2text est plus robuste.
betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop