Seite 1 von 1

Bestimmten Bereich aus HTML auslesen?

Verfasst: Sonntag 29. März 2009, 11:32
von Echoplex
Hi,

hab ein kleines Problem, ich lade mir per urllib eine Webseite in eine Textdatei, in dieser Textdatei soll alles gelöscht werden bis auf den Bereich von <textarea> bis </textarea>!
Welchen Befehl brauch ich?
Hab mir schon mal re angeschaut, aber da finde ich nichts passendes?!

MfG

Verfasst: Sonntag 29. März 2009, 11:43
von cofi
Was du willst ist ein HTML Parser.
* BeautifulSoup
* lxml.html
* ....

Verfasst: Sonntag 29. März 2009, 12:08
von Dauerbaustelle

Code: Alles auswählen

import re
re.findall('<textarea.+?>.+?</textarea>', deinhtml)

Verfasst: Sonntag 29. März 2009, 12:18
von Leonidas
Was wäre wenn jemand ``<TEXTAREA>`` schreibt? Das wäre immer noch gültiges HTML.

Verfasst: Sonntag 29. März 2009, 12:20
von Dauerbaustelle
Das hat er aber nicht erzählt :P

Verfasst: Sonntag 29. März 2009, 13:16
von Echoplex
@Leonidas
Das wär erst mal egal :wink:

@Dauerbaustelle, cofi
Danke, aber ich bekomm (re.findall) immer folgenden Error:
Traceback (most recent call last):
File "", line 22, in onOeffnen
re.findall('<textarea.+?>.+?</textarea>', liste)
File "", line 175, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
Traceback (most recent call last):
File ", line 22, in onOeffnen
re.findall('<textarea.+?>.+?</textarea>', liste)
File "", line 175, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
Hier der Code:
http://codepad.org/AQ0knMBO
http://codepad.org/BCFsUQdD

(Da geht noch einiges net, aber mir geht es erstmal um die geposteten Fehler!)

MfG

Verfasst: Sonntag 29. März 2009, 13:24
von lunar
Dauerbaustelle hat geschrieben:Das hat er aber nicht erzählt :P
Das macht die Verwendung regulärer Ausdrücke nicht besser ... ;)

@Echoplex
Ich würde dir raten, das Programm erstmal ohne GUI umzusetzen. Dein Code enthält nämlich noch einige Fehler, die mich vermuten lassen, dass du dich mit Python noch nicht gut genug auskennst, um vernünftigen GUI-Code programmieren zu können.

Zum einen ist dir offenbar nicht mal bewusst, dass ein Methodenaufruf Klammern erfordert. An zwei Stellen hast du diese nämlich vergessen, weder "DLListe.clear()" noch "datei.close()" werden aufgerufen. Letzteres führt zum nächsten Punkt: Fehlende Ausnahmebehandlung. Tritt ein Fehler auf, so wird die Datei nicht korrekt geschlossen.

Der Fehler bei ".findall" ist ein Typfehler. Die Funktion erwartet eine Zeichenkette, du aber übergibst ein Datei-ähnliches Objekt, welches von "urllib2.urlopen" zurückgegeben wurde.

Ich denke, du solltest dir erstmal sowohl das Python-Tutorial als auch die Dokumentation der verwendeten Funktionen genau durchlesen sowie den interaktiven Interpreter kennen lernen, bevor du dich an eine GUI oder etwas komplexere Aufgaben wie HTML-Parsing wagst. Momentan sieht das nämlich alles mehr nach "Programming by accident" als nach einem gut überlegten, durchdachten Lösungsansatz aus. Nichts für ungut ...

Verfasst: Sonntag 29. März 2009, 13:26
von cofi
Was urlopen zurückliefert, ist nunmal kein String.
Versuch mal das in einen String zu konvertieren -> `str(urlopen(...))' bzw
`urlopen(...).decode(insert_codec_here)'
Ersteres wenn es nur ASCII ist, letzteres wenn du Sonderzeichen hast.

P.S. Etwas das keine Liste ist `liste' zu nennen ist ziemlich verwirrend.

Verfasst: Sonntag 29. März 2009, 13:35
von lunar
Danke für die Steilvorlage ...

Genau das meine ich mit "programming by accident": Einfach mal ohne Sinn und Verstand wild drauflos probierend und mal irgendwas "versuchen", anstatt die Dokumentation zu lesen und anschließend zu überlegen, was "file-like object" bedeutet und wie man daraus eine Zeichenkette extrahiert ... :roll:

Verfasst: Sonntag 29. März 2009, 13:48
von Echoplex
Kenne Qt halt schon von C++, da hab ich mir halt gedacht ich könnte es gleich verwenden :?
Okay, werd mal versuchen das ganz in der Konsole umzusetzen!

MfG

Verfasst: Sonntag 29. März 2009, 14:09
von Dauerbaustelle
@lunar: Ich denke, man kann sich das Zeugs auch aneignen, wenn man überhaupt keine Erfahrung hat, ich zB habe einfach mit einem GTK2-Tutorial auf Englisch angefangen und die Codeschnipsel abgeschrieben und kanns heute trotzdem...

Verfasst: Sonntag 29. März 2009, 14:10
von lunar
Echoplex hat geschrieben:Kenne Qt halt schon von C++, da hab ich mir halt gedacht ich könnte es gleich verwenden :?
Ich habe nichts gegen die Wahl von Qt, im Gegenteil, für GUIs ist das meiner Meinung nach die beste Wahl ;) Wenn du mit GUI-Entwicklung besser zurecht kommst, dann wäre es auch falsch, etwas anderes zu tun.

Allerdings zeigt dein Code eben, dass dir noch ein paar Python-Grundlagen fehlen. Meiner Erfahrung nach lernt man die besser, wenn man sich erstmal auf die Sprache selbst konzentriert anstatt nebenbei auch noch mit dem GUI-Framework zu arbeiten. Das geht dann halt am besten in einer einfachen Konsolenanwendung.

Zudem ist es nicht schwer, eine GUI zu implementieren, wenn man die Logik gut gekapselt hat.