Html-Tags entfernen mit BeautifulSoup

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
feuervogel
User
Beiträge: 28
Registriert: Dienstag 18. September 2007, 14:59

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?
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
feuervogel
User
Beiträge: 28
Registriert: Dienstag 18. September 2007, 14:59

alles klar, vielen lieben dank!
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Ansonsten werfe ich mal html5lib in den Raum. Die gefällt mir mittlerweile wesentlich besser als BeautifulSoup. Vor allem weil sie etrees ausgeben kann.
TUFKAB – the user formerly known as blackbird
feuervogel
User
Beiträge: 28
Registriert: Dienstag 18. September 2007, 14:59

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...
Antworten