Seite 1 von 1

Html-Parsen ich packs einfach nicht

Verfasst: Donnerstag 25. Mai 2006, 20:09
von pythonist
Hallo Pythonier,

Ich versuch jetzt schon seit n paar Stunden dahinter zu kommen wie man mit python HTML parst, komm aber einfach nicht weiter. Als parser wolle ich den HTMLParser nehmen weil er soviel ich gelesen hab auch XHTML kann. Mein ziel ist den Inhalt zwischen <textarea id="code" class="codeedit" name="code" cols="80" rows="10" onkeydown="checkTab(this)"> und </textarea> zu parsen mein bisheriger Ansatz auf Basis des Beispielscrips in der modulelibarie sieht so aus:

Code: Alles auswählen

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        if tag == "textarea":
            print "Encountered the beginning of a textarea tag" 
     def handle_endtag(self, tag):
        if tag == "textarea":
            print "Encountered the end of a textarea tag" 
MyHTMLParser().feed(html)
Soweit ich das verstanden habe, wird handle_starttag solange ausgeführt bis der Endtag kommt. Nur wie bekomme ich die Daten dazwischen.

Danke schon mal für die sicher wieder kompetente Hilfe

pythonist

Re: Html-Parsen ich packs einfach nicht

Verfasst: Donnerstag 25. Mai 2006, 20:17
von gerold
pythonist hat geschrieben:Mein ziel ist den Inhalt zwischen <textarea id="code" class="codeedit" name="code" cols="80" rows="10" onkeydown="checkTab(this)"> und </textarea> zu parsen
Hi pythonist!

Vergiss den **HTMLParser** für so einfache Dinge.

Schmeiß mal ein wenig echten HTML-Code rüber (nicht nur das zu parsende Codeteil), dann zeige ich dir wie das mit **BeautifulSoup** geht.

Siehe auch: http://www.python-forum.de/topic-4664.html

mfg
Gerold
:-)

Verfasst: Donnerstag 25. Mai 2006, 20:19
von pythonist
hier der html code:

Code: Alles auswählen

html = """<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Frubar Paste</title>
<link rel="stylesheet" type="text/css" media="screen" href="http://www.frubar.net/external/ctools.css" />
<link rel="shortcut icon" href="/favicon.png" type="image/png" />
<!--<style type="text/css">
</style>-->
</head>

[...] 

</textarea>

</form>
  
</div>

</body>
</html>"""
Aber BeautifulSoup ist nicht standardmäßig bei Python dabei oder?
Es wär nicht schlecht wenn mir trotzdem noch jemand den HTMLParser erklären könnte, weil ich vieleicht auch mal aufwendigere sachen Parsen will, aber fürn Anfang bin ich schon froh wenn ich das parsen kann.

Edit by Gerold: Sorry -- So viel HTML packt unser CodeBB nicht mehr. Ich habe den Code gekürzt. Das Original habe ich, damit ich dir eine Antwort schreiben kann.

Verfasst: Donnerstag 25. Mai 2006, 20:29
von gerold
Zuerst mal die kurze Antwort:

Hier ein einfaches Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup

# Die ID des Tags macht es leicht, da man danach filtern kann.

html = """<html>
<head>
  <title>Hallo Welt</title>
</head>
<body>
  <p>
    Irgendein Absatz
  </p>
  <table>
    <tr>
      <td>
        <textarea id="code" 
                  class="codeedit" 
                  name="code" 
                  cols="80" 
                  rows="10" 
                  onkeydown="checkTab(this)"
        > und </textarea>
      </td>
    </tr>
  </table>
</body>
</html>
"""

soup = BeautifulSoup(html)

for textarea in soup("textarea", {"id": "code"}):
    print "TEXT:", textarea.string
mfg
Gerold
:-)

Verfasst: Donnerstag 25. Mai 2006, 20:30
von gerold
pythonist hat geschrieben:Aber BeautifulSoup ist nicht standardmäßig bei Python dabei oder?
Hi pythonist!

Nein, aber es ist nur ein einfaches Python-Modul, das du jederzeit mit deinem Programm mitgeben oder sogar in dein Programm integrieren kannst.

mfg
Gerold
:-)

Verfasst: Donnerstag 25. Mai 2006, 20:33
von gerold
Hi pythonist!

Ich habe soeben bemerkt, dass mein einfaches Beispiel für deinen Zweck bereits ausreicht. Einfach die Variable **html** durch deinen HTML-Code ersetzen.

mfg
Gerold
:-)

Verfasst: Donnerstag 25. Mai 2006, 20:33
von pythonist
Ok das sieht ja schon mal um einiges einfacher aus, als der HtmlParser ich werds in mein Skript einbauen.
Großes Thx