Seite 1 von 1

Html-Tags entfernen mit BeautifulSoup

Verfasst: Donnerstag 15. November 2007, 17:32
von feuervogel
Hallo,

ich brauch mal kurz nen Tritt in die richtige Richtung: Ich will mit BeautifulSoup die Tags aus einem HTML-Dokument filtern und mir nur den Text ausgeben lassen...habe da bisher nur eine rekursive Lösung gefunden, die über die einzelnen Tags iteriert (rekursiert?), was ich aber nicht grade elegant finde...

Oder brauche ich dazu ein anderes Modul?

Verfasst: Donnerstag 15. November 2007, 17:53
von BlackJack
Eine rekursive Datenstruktur mit rekursiven Funktionen zu bearbeiten ist IMHO nicht unelegant. Es gibt zwar einen einfacheren Weg, aber der versteckt die rekursiven Funktionen letztendlich nur.

Code: Alles auswählen

from BeautifulSoup import BeautifulSoup

def main():
    html_file = open('test.html')
    source = html_file.read()
    html_file.close()
    
    soup = BeautifulSoup(source, convertEntities=BeautifulSoup.HTML_ENTITIES)
    text = ''.join(soup.body(text=True))
    print text

Verfasst: Freitag 16. November 2007, 14:29
von feuervogel
alles klar, vielen lieben dank!

Verfasst: Freitag 16. November 2007, 20:39
von mitsuhiko
Ansonsten werfe ich mal html5lib in den Raum. Die gefällt mir mittlerweile wesentlich besser als BeautifulSoup. Vor allem weil sie etrees ausgeben kann.

Verfasst: Sonntag 18. November 2007, 19:56
von feuervogel
was mir grade auch nicht so gefällt:

ich will die html-kommentare entfernen, dafür gibts extra eine anleitung in der beautifulsoup-doku. aus:
</div>
<script type="text/javascript">
<!--
spFramebuster();
// -->
</script> <script type="text/javascript">
<!--
OAS_RICH('x70');
// -->
</script><br class="spBreakNoHeight" clear="all" /> <!-- ##SPONTAG: LAYER## -->
<!-- Vignette StoryServer 5.0 Wed Nov 14 10:58:52 2007 -->
</body>
</html>
wird
</div>
<script type="text/javascript">
<!--
spFramebuster();
// -->
</script> <script type="text/javascript">
<!--
OAS_RICH('x70');
// -->
</script><br class="spBreakNoHeight" clear="all" />

</body>
</html>
und nach entfernen der tags
<!--
spFramebuster();
// -->

<!--
OAS_RICH('x70');
// -->
was natürlich nicht grade schön ist...