parsen oder filtern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

parsen oder filtern

Beitragvon The Hit-Man » Freitag 11. April 2008, 13:01

habs ja nun endlich geschafft, html seiten auszulesen. jetzt gibts nen neues problem. ich brauche ja bestimmte informationen, von der gesaugten html seite. was wäre da jetzt angebrachter, oder wie wäre es am besten, diese werte auszulesen? die html seite, liegt mir ja als string vor. wie wäre es jetzt am besten, die informationen, die ich brauche, aus der seite herauszufiltern / parsen?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 11. April 2008, 13:23

Mit einem HTML-Scraper wie BeautifulSoup oder html5lib.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Freitag 11. April 2008, 15:30

habe mir das BeautifulSoup installiert. doch ich bin mir nicht sicher, ob es gerade das ist, was ich brauche. das modul ließt so weit ich das verstanden habe, nur zwischen zwei tags aus. ich muß aber nach einem wort ( so denke ich ) suchen. hier mal, nen kleiner schippschnapp aus der html seite, die ich durchsuchen will

Code: Alles auswählen

                        <!-- mails & shortmessages-->

                            <table width="100%" border="0" align="center" cellspacing="1">

                              <tr>

                                <td width="57%"><img src="http://image.onlineglueck.de/neu/main/mini_email.gif"> Neue <a href="/olg/mails/?folder=1">Mails:</a></td>

                                <td>0</td>

                              </tr>

                              <tr>

                                <td><img src="http://image.onlineglueck.de/neu/main/mini_shortmessage.gif"> Neue <a href="/olg/shortmessages/?folder=1">Shortmessages:</a></td>

                                <td align="left">0</td>

                              </tr>

                                                            <tr>

                                <td><img src="http://image.onlineglueck.de/neu/main/mini_gaestebuch.gif"> Neue <a href="/olg/profiledit/index.olg?action=guestbook">Gästebucheinträge:</a></td>

                                <td align="left">0</td>

                              </tr>

                                                                                                                      </table>

                            <!-- /mails & shortmessages-->

hier sieht man den eintrag "Shortmessages" uns ein paar spalten weiter, die anzahl ( hier 0 ) ich denke nicht, das mir das modul dabei weiter hilft, eher sollte ich das dingen doch mit diesen regulären ausdrücken durchsuchen, die mir aber echt kopfzerbrechen machen, weil die ja mal echt cryptisch sind.

@Leonidas
würdest du ds echt mit dem HTML-Scraper lösen? ist das möglich?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 11. April 2008, 15:46

The Hit-Man hat geschrieben:habe mir das BeautifulSoup installiert. doch ich bin mir nicht sicher, ob es gerade das ist, was ich brauche. das modul ließt so weit ich das verstanden habe, nur zwischen zwei tags aus.

Du schaust einfach wo die dich interessierende Nachricht drin steht, also in welchem Tag und greifst dadrauf zu. Das ist einfacher, als das ganze HTML mit regulären Ausdrücken durchzufiltern, wenn dich nur ein kleines Subset der Datei interessiert.

The Hit-Man hat geschrieben:hier sieht man den eintrag "Shortmessages" uns ein paar spalten weiter, die anzahl ( hier 0 ) ich denke nicht, das mir das modul dabei weiter hilft

Warum. Du suchst einfach nach dem TD welches nach einem TD steht, indem ein IMG mit src http://image.onlineglueck.de/neu/main/m ... essage.gif ist und liest das aus. Damit hast du dann deine gewünschte 0.

The Hit-Man hat geschrieben:@Leonidas
würdest du ds echt mit dem HTML-Scraper lösen? ist das möglich?

Natürlich. Ich würde mir doch nicht die Mühe machen, mir dafür reguläe Ausdrücke zu überlegen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Freitag 11. April 2008, 21:39

das werde ich mal versuchen. du scheinst es echt drauf zu haben mit python ;) ich habe gerade erst damit angefangen, mit python anzuschauen ;) ist schon irgendwie komisch. kenne fast jede programmiersprache, aber keine richtig. manchmal, macht es mich kirre, mich nicht entscheiden zu können, welche sprache, man nehmen soll. auf der arbeit nutze ist viel c# ( unter windows ), unter linux gefällt mir python bis jetzt sehr gut.
werde mir die doku dann mal genauer durch lesen, weil bis jetzt habe ich noch nicht genau verstanden, wie genau ich das modul nutze. nunja, mit mechanize, hast ja dann auch geklappt. aber wenne nen tipp hast, wie ichs am besten, mit dem modul, diese stelle finden könnte, wäre ich trotzdem dankbar. heißt nicht, das du mir die ganze arbeit abnehmen sollst. lerne ja auch fleißig dabei ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 11. April 2008, 22:38

The Hit-Man hat geschrieben:das werde ich mal versuchen. du scheinst es echt drauf zu haben mit python ;)

Naja, ich mahe mehr zu vielem eine Ahnung, aber zu nichts eine besonders fundierte Meinung ;)

The Hit-Man hat geschrieben:kenne fast jede programmiersprache, aber keine richtig. manchmal, macht es mich kirre, mich nicht entscheiden zu können, welche sprache, man nehmen soll. auf der arbeit nutze ist viel c# ( unter windows ), unter linux gefällt mir python bis jetzt sehr gut.

Naja, imperative Programmiersprachen verhalten sich oft alle sehr ähnlich (einzig die Typisierung ist ein größeres Merkmal was sie unterscheidet, und etwas syntaktischer Zucker) daher ist die Anzahl der verfügbaren, brauchbaren Libs ein wichtiger Faktor. Wenn du mal etwas neues ausprobieren willst, dann sieh dir doch Haskell an. Da hast du eine Sprache wo du trotz einiges an Programmiererfahrung trotzdem erstmal da stehst und keine Ahnung hast wie man die Probleme lösen kann. Alternativ auch einen Lisp-Dialekt wie Scheme oder Common Lisp, die haben wiederrum den Vorteil, dass Metaprogrammierung in diesen Sprachen kein Sonderfall sondern eher die Regel ist. Ist aber zugegebenermaßen schwerer, damit was "praktisches", realitätsnahes zu bauen (wobei Haskell laut hörensagen eine großartige Community hat, was man bei Lisp leider nicht immer sagen kann). Ein anderes Feld ist die logische Programmierung, aber da würde mir außer "ja, gucken wir mal wie das geht" kein nicht-akademischer Einsatzzweck einfallen :)

The Hit-Man hat geschrieben:aber wenne nen tipp hast, wie ichs am besten, mit dem modul, diese stelle finden könnte, wäre ich trotzdem dankbar. heißt nicht, das du mir die ganze arbeit abnehmen sollst. lerne ja auch fleißig dabei ;)

Wenn du das ausgegebene HTML mal (komplett) ins Lodgeit pastest, dann könnt ich mal sehen, was sich da machen lässt (allerdings ohne Garantie). Deine positive Lernhaltung nehme ich natürlich erfreut zur Kenntniss. :) Genau in solchen Fällen ist es oft sinnvoll, den Interpreter interaktiv zu verwenden, weil man dort eben alle möglichen Dinge ausprobieren kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Samstag 12. April 2008, 18:35

ja, die meisten sprachen, sind schon fast gleich, das stimmt wohl, kommt meist nur auf den syntax drauf an. allerdings, wenn ich an meine c64er und amiga zeit zurück denke, habe ich ja in assembler programmiert und die sprache, hat ja mal gar nichts, mit einer hochsprache zu tun. muß ganz ehrlich sagen, unter assembler, kam ich damals besser klar. liegt wohl daran, das der 6502 und der 68000 nur ne hand voll an befehlen hatte und man kaum module oder libs nutzen konnte. sieht heute alles anders aus. bis ich mir vorstellen konnte, wie man eine OO sprache, wie java, oder so nutze, ist ne ganze menge zeit vergangen ;)
nunja, aber hier nun zu dem problem. ich gebe dir dann mal die ganze seite mit, die ich ja dann ausgelesen hatte ( die ich durchsuchen wollte )

[Edit (Leonidas): Unvollständigen, unglaublich langen und kaputten HTML-Code gelöscht.]
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 12. April 2008, 18:49

The Hit-Man hat geschrieben:ich gebe dir dann mal die ganze seite mit, die ich ja dann ausgelesen hatte ( die ich durchsuchen wollte )

Hmm, du hast den Teil "paste es ins Lodgeit" überlesen. PHPbb unterstützt keine so langen Posts und der Python-Highlighter hier wirft das Handtuch sogar schon früher.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Samstag 12. April 2008, 18:58

oh jeeee, das sagt mir gar nichts. was ist denn das? das ich das forum, fast schon so gesprengt hatte, ist mir auch schon aufgefallen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 12. April 2008, 19:52

The Hit-Man hat geschrieben:oh jeeee, das sagt mir gar nichts. was ist denn das?

Forumssuche hilft.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Samstag 12. April 2008, 20:09

aha ;) habs dann doch gefunden. die funktion habe ich noch in keinem forum gebraucht. also dann, sollte das der link sein

http://paste.pocoo.org/show/39914/

richtig?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 13. April 2008, 15:01

Das geht etwa so, mit lxml 2.0.3 und html5lib r1147 (da 0.10 noch nicht mit lxml 2 tut):

Code: Alles auswählen

import html5lib
from html5lib import treebuilders
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder('lxml'))
f = open('olg.html')
doc = parser.parse(f)
f.close()
image = doc.findall("//*img[@src='http://image.onlineglueck.de/neu/main/mini_shortmessage.gif']")[0]
parent = image.getparent()
number = parent.getnext()
print number.text

Du kannst natürlich auch einen anderen Treebuilder verwenden, aber lxml ist wegen dem XPath und ``getparent()`` was es in ElementTree 1.2 (welches Teil von Python 2.5 ist) nicht gibt angenehmer zu nutzen als ET.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Dienstag 15. April 2008, 18:36

danke, hat auch funktioniert ;) !!! werde mal nen bischen mit dem suchen, und dem modul rumspielen.
The Hit-Man
User
Beiträge: 407
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Beitragvon The Hit-Man » Mittwoch 30. April 2008, 12:06

*argh*
habe meinen rechner neu installiert, und jetzt plötzlich funktioniert der code mit dem parsen nicht mehr :( bekomme diese fehlermeldung. habe ich vergessen, was zu installieren?

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/hitman/python/WebOLG/test.py", line 3, in <module>
    parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder('lxml'))
  File "/var/lib/python-support/python2.5/html5lib/html5parser.py", line 52, in __init__
    self.tree = tree()
TypeError: 'NoneType' object is not callable


den code verstanden, habe ich ja. man sucht nach dem bildchen, nimmt davon den tag und läßt sich den nachvolgenden tag ausgeben ( wäre ja meine zahl, für die messages, die ich brauche ). aber wieso, bekomme ich jetzt eine fehlermeldung?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 30. April 2008, 13:41

The Hit-Man hat geschrieben:aber wieso, bekomme ich jetzt eine fehlermeldung?

Weil du die Release-Version von html5lib verwendest, die kommt mit lxml 2.x nicht klar. Das habe ich bereits oben geschrieben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder