Html-Parsen ich packs einfach nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Html-Parsen ich packs einfach nicht

Beitragvon pythonist » Donnerstag 25. Mai 2006, 20:09

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Html-Parsen ich packs einfach nicht

Beitragvon gerold » Donnerstag 25. Mai 2006, 20:17

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Beitragvon pythonist » Donnerstag 25. Mai 2006, 20:19

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 25. Mai 2006, 20:29

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 25. Mai 2006, 20:30

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Donnerstag 25. Mai 2006, 20:33

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
pythonist
User
Beiträge: 40
Registriert: Sonntag 14. Mai 2006, 17:28

Beitragvon pythonist » Donnerstag 25. Mai 2006, 20:33

Ok das sieht ja schon mal um einiges einfacher aus, als der HtmlParser ich werds in mein Skript einbauen.
Großes Thx

Wer ist online?

Mitglieder in diesem Forum: WhiteyW