parsen oder filtern

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

naja, das wird schon. ich mache ja eher learning by doing. Denk mal ein paar Monate zurück, da konnte ich ja mal gar nichts. Deshalb noch mal vielen Dank an das Forum und die Leute die mir immer helfen. Ich werde bestimmt noch ganz viele Fragen haben.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

da stehe ich schon wieder. hab so weit geschafft, eine seite parsen, um mir anzeigen zu lassen, welche Leute gerade online sind. Jetzt bekomme ich eine Liste mit solchen Einträgen zurück.

Code: Alles auswählen

</tr>, <tr onclick="open_profil_by_id(1152110);"><td width="20"></td><td width="15" class="norm">20</td><td class="pic" onmouseover="mouseIn(this)" onmouseout="mouseOut(this)">nomani</td>
Jetzt brauche ich nur hinten das nmani, denn das sind die reinen Benutzernamen, die ich in mein Listfeld unterbringen möchte, mein bisheriger Befehl zum filtern lautete:

Code: Alles auswählen

result = soup.html.findAll('tr')
Gibt es da ne Möglichkeit, nur den Nicknamen auszulesen, unter BeautifulSoup? Oder eine Komination, mit meiner Suche?
BlackJack

Natürlich gibt's da eine Möglichkeit, aber Du solltest vielleicht wirklich mal HTML und BeautifulSoup lernen, dann wüsstest Du das auch. Ein HTML-Dokument kann man sich als Baum mit Knoten und Attributen vorstellen, viele HTML-Editoren und auch Browser haben auch eine entsprechende Darstellung, und mit BeatifulSoup kann man sich daraus Knoten heraus filtern und von Knoten zu Eltern oder Kindknoten navigieren. Das heisst Du musst Dir nur anschauen wie man die gewünschten Knoten am besten und sichersten ansteuern kann.

Bei den gegebenen Informationen scheinen das also <tr>-Knoten zu sein, deren `onclick`-Attribut mit 'open_profil_by_id' beginnt. Und wenn man die hat, kann man bei jedem dieser Knoten den <td>-Knoten mit dem `class`-Attribut 'pic' identifizieren und dessen Kindknoten, den Text, auslesen.

Code: Alles auswählen

    rows = soup('tr', onclick=lambda v: v.startswith('open_profil_by_id'))
    names = [row.find('td', 'pic').contents[0] for row in rows]
Man sollte vielleicht nicht beim `soup`-Objekt beginnen, sondern erst einmal die Tabelle ansteuern.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

stecke leider noch in den Anfängen und habe mir auch die Doku auf der Homepage durchgelesen. Irgendwie immer alle zu trocken. Ihr erkärt es irgendwie besser. Klar weiß ich wie eine HTML Seite ungefähr aufgebaut ist, und kann mir auch den Baum vorstellen, wie eine XML Datei, nur eben mit Tabellen und so weiter. Ist nicht so, das ich hier wegen jeder kleinen Sache eine Frage stellen würde ( vielleicht sieht es für Euch so aus, da ihr ja bei weitem mehr Ahnung davon habt, wie ich ). Bevor ich Frage, google ich und suche erst im Forum nach, was passen könnte. Ich denke mal meine Fragen, sind irgendwie zu speziell ;)

EDIT:
by the way, das lambda verwirrt mich.
BlackJack

Das ist einfach eine Funktion ohne Namen. Man hätte auch extra eine Funktion mit ``def`` vorher definieren können und dann beim Aufruf den Namen angeben.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Habe mich ne Zeit lang, gerade mit C++ beschäftigt und mit der wxwidgets Lib. Ich suchte ja mal was zum parsen von HTML Seiten. Auf der Projektseite von wxwidgets ist mir aufgefallen, das die ja auch ne Parser-Klasse mit eingebaut haben. Verstehe ich das richtig, das wxwidgets fast ein komplettes FrameWork ist? Es sind ja unmengen an Klassen da drin. Wäre es also möglich, auch den HTM Parser von wxwidgets nutzen zu können?

Des weiteren, habe ich leider noch immer die Fragen, wie ich aus meinem fertigen Projekt, ein ausführbares Programm unter Windows machen kann. Wäre mir jetzt egal, ob ich die ganzen Runtimes von Python, mit installieren müßte. Es sollte einfach nur ein Installer sein, in dem mein Programm, dann auch schon mit drin wäre. Kann ich die wxwidgets einfach mit installieren?

Stelle mir das so vor, nehme die komplette Umgebung ( habe etwas im Netz gefunden, das sich stand alone Python nennt ), mein Programm in ein Unterverzeichnis+wxwidgets und machen nen Installer draus. Ist das möglich?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

The Hit-Man hat geschrieben:Wäre es also möglich, auch den HTM Parser von wxwidgets nutzen zu können?
Sofern wxPython den wrappt schon - ansonsten müsstest du den Wrapper selbst schreiben. Halte aber beides für wenig sinnvoll, weil Python doch schon Parser hat.
The Hit-Man hat geschrieben:Stelle mir das so vor, nehme die komplette Umgebung ( habe etwas im Netz gefunden, das sich stand alone Python nennt ), mein Programm in ein Unterverzeichnis+wxwidgets und machen nen Installer draus. Ist das möglich?
Ja. Das ist so ähnlich wie pylite.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Das mit pylite hat super geklappt, alle Module laufen sogar damit ;) Jetzt noch mal ne kleine Frage. Da man ja erst die Python Applikation mit pythonw, verbinden muß. Gibt es so was ähnliches, wie nen Launcher, der das Python Programm startet? Wie ungefähr bei Java? Oder kann man mit dem NSIS, nen Installer schreiben, der ne Verknüpfung auf das pythonw macht?
Oder wäre es OK, wenn man das Hauptprogramm in C++ schreibt und dann nur auf Sachen von Python zugreift, die ich mit C++ nicht henbekommen würde. Wie zum Beispiel, mechanize und beautiful soup. Denn solche AddOns habe ich für C++ leider nicht gefunden :(
Also das ich unter C++ nur die GUI mit wxWidgets mache, und die Programmlogik, Python überlasse? Wird so etwas gemacht?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

The Hit-Man hat geschrieben:Das mit pylite hat super geklappt, alle Module laufen sogar damit ;) Jetzt noch mal ne kleine Frage. Da man ja erst die Python Applikation mit pythonw, verbinden muß. Gibt es so was ähnliches, wie nen Launcher, der das Python Programm startet? Wie ungefähr bei Java? Oder kann man mit dem NSIS, nen Installer schreiben, der ne Verknüpfung auf das pythonw macht?
Naja, du kannst durchaus mit pyw-Dateien mit pythonw verknüpfen. Dazu brauchst du nicht einmal NSIS, das kannst du von Python aus mit ``_winreg`` machen.
The Hit-Man hat geschrieben:Oder wäre es OK, wenn man das Hauptprogramm in C++ schreibt und dann nur auf Sachen von Python zugreift, die ich mit C++ nicht henbekommen würde. Wie zum Beispiel, mechanize und beautiful soup. Denn solche AddOns habe ich für C++ leider nicht gefunden :(
Also das ich unter C++ nur die GUI mit wxWidgets mache, und die Programmlogik, Python überlasse? Wird so etwas gemacht?
Welchen Vorteil, außer zusätzlichen Schmerz und Memory Leaks hat das gegenüber dem Schreiben des ganzen Programms in Python?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

nen Launcher wäre nicht schlecht. Habe mir mal eben einen zusammengetickert. Ist ja nur ein C++ Befehl ;). Und auch nur für Windows. Für Linux braucht man ja keinen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wieso braucht man denn bei Windows einen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

naja, weil die Leute, eigentlich nur immer ne .exe Datei kennen. Ich nutze ja pylite und wenn ich das mit meinem Programm weiter gebe, müßten diese ja erst mal die .pyc Datei mit python verknüpfen. Unter Frostwire ( java ) habe ich gesehen, das die auch so was wie nen Launcher haben. Wollte den Leuten so wenig arbeit wie möglich machen, wenn ich mein Programm weiter gebe.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Unter Windows werden Dateiendungen standardmäßig nicht angezeigt, von dem her ist dem User herzlich egal ob etwas nun eine EXE, COM, PIF oder BAT-Datei ist. Hauptsache die Dateiendung ist richtig verknüpft, was auch viel universeller ist weil so eine Verknüpfung dann für alle Dateien mit der gleichen Endung gilt.

Also ich habe mich schon öfter über den blöden Launcher von Eclipse geärgert, du nicht?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

Nutze kein Eclipse :( ( ist mir viel zu fett, und zu langsam ).Für mehrere Python Projekte, magst Du recht haben. Unter Linux würde ich einen solchen Launcher auch nicht brauchen. Da kannste in der ersten Codezeile ja auch den Interpreter an geben, der genutzt werden sollte. Ich meine einfach nen User, der sich mal gar nicht auskennt. Der sieht das er ne .exe Datei anklicken kann. Wollte erst eine Batch Datei nehmen, aber die DosBox unter Windows, kannst man damit einfach nicht unterdrücken und ich habe ganz, ganz selten mal gesehen, das sich ein Windows Programm mit einer DosBox im Hintergrund öffnet. Py2Exe hätte mir auch gerreicht, doch das gibt ja mit Modulen meist ärger. Hatte zwar den Entwickler von "mechanize" gemailt, ob es möglich sei Py2Exe zu nutzen und er meinte "ja", aber das war mir echt nen Stück zu kompliziert. Das Programm soll einfach, ohne Schwierigkeiten laufen und gut ;)
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

The Hit-Man hat geschrieben:Wollte erst eine Batch Datei nehmen, aber die DosBox unter Windows, kannst man damit einfach nicht unterdrücken und ich habe ganz, ganz selten mal gesehen, das sich ein Windows Programm mit einer DosBox im Hintergrund öffnet.
Einfach in der Batch-Datei dein Programm/whatever mit ``start`` starten, dann verschwindet das Fenster wieder. Ist dann halt immer noch für kurze Zeit beim Start zu sehen.
The Hit-Man
User
Beiträge: 435
Registriert: Montag 20. Februar 2006, 18:11
Wohnort: Menden / Sauerland
Kontaktdaten:

naja, dieses Geflacker am Anfang ist dann aber echt unschön :( Ich finde den Launcher so weit ganz gut ;)
Antworten