HTML File nach bestimmten Tags greppen

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.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 17. Februar 2009, 18:46

Hallo Leute,

ich suche eine einfache möglichkeit eine bestimmte HTML/XML Datei aus dem Netz, oder auch lokal nach bestimmten werten zu durchsuchen und anschließend bestimmte Paramter in eine Datenbank zu schreiben.

Da sich diese Datei regekmäßig ändert, kann ich nicht sagen, in welcher Zeile sie stehen.

Ich kenne quasi nur einige Teilwerte, die in meine Tabelle sollen.

Also ich will quasi nach meinem Suchbegriff greppen und will als Ausgabe die komplette Zeile der Tabelle aus dem HTML.

Gibt es da bereits etwas?

Falls nein wie setze ich das am besten um?

bankkind
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Dienstag 17. Februar 2009, 18:49

Moin,

BeautifulSoup wird hier im Forum immer wieder genannt. Verwendet habe ich das selber aber noch nie.

Gruß,
Manuel
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Dienstag 17. Februar 2009, 18:49

jo er war schneller

Code: Alles auswählen

#!/usr/bin/env python

import re
import urllib2
from BeautifulSoup import BeautifulSoup

try:
    url = urllib2.urlopen("http://www.fz-juelich.de/gs/meteo/metmess1de/")
    soup = BeautifulSoup(url.read(),
                         convertEntities=BeautifulSoup.HTML_ENTITIES)

    temp =  soup.find(text=re.compile("Lufttemperatur")).findNext("td")
    output = temp.contents[0].string.strip()

except urllib2.URLError:
    output = "Unknown"

print output
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Dienstag 17. Februar 2009, 19:37

Also dieses Beautiful Soup habe ich mal grob überflogen, aber irgendwie werde ich damit nicht warm. Keine Ahnung...

gibt es dazu ein verständliches deutsches Tutorial? oder eine Übersetzung etc. Oder von mir aus auch eine Alternative Technik zu der es gute Turorials gibt?
lunar

Dienstag 17. Februar 2009, 19:43

bankkind hat geschrieben:gibt es dazu ein verständliches deutsches Tutorial? oder eine Übersetzung etc. Oder von mir aus auch eine Alternative Technik zu der es gute Turorials gibt?
lxml.html wäre eine Alternative, es hat die bessere API und läuft schneller und speicherschonender.

Deutschsprachige Dokumentation und/oder Tutorials kenne ich aber weder zu lxml.html noch zu BeautifulSoup. Trotzdem sei dir die Nutzung eines vernünftigen HTML-Parsers nahegelegt, reguläre Ausdrücke sind für deine Anforderungen nicht das geeignete Werkzeug.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dienstag 17. Februar 2009, 20:39

bankkind hat geschrieben:HTML/XML Datei
Hast du eine HTML oder eine XML Datei?
Für XML gibt es bereits Pakete in der StandardLibrary:
http://openbook.galileocomputing.de/pyt ... 5cdc7fb80f
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 18. Februar 2009, 16:45

Es ist HTML, aber ich will mir alle möglichkeiten offen halten. Falls mir der Webmaster mal eine vernünftige XML Schnittstelle zur Verfügung stellt, das ich schnell umschwenken kann.

OK. Benutzt hier jemand BeautifulSoap? Kann mir jemand mal ein kleines Beispiel zeigen:

Wie komme ich an den Inhalt eines bestimmten Tags?
Den Tag identifiziere ich anhand mehrerer Dinge: Farbe, Class etc.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 18. Februar 2009, 17:17

Also ich habe mal für die Live-Ergebniss-Tabellle von eurosport.de einen scraper geschrieben. Ich habe dazu lxml verwendet. Das ist imho sehr leicht und intuitiv zu benutzen. Mittels XPath habe suche ich mir den Weg zu der Tabelle, die ich parsen will. (Hat halt eine bestimmte Klasse iirc, mittel id wärs natürlich noch schicker)

Ich hab das Script grad nicht greifbar, lade es aber gerne mal hoch.

Ansonsten nutz doch mal die SuFu! Ist noch nicht lange her, da hatten wir hier einen Thread zum Thema Temperatur-Auslesen ...
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 18. Februar 2009, 17:29

wenn das ganze nicht zu geheim ist dann gib doch mal ne richtung der webpage die du grappen möchstest und welche zahl oder text du haben willst

also zum verständniss soup gräppt die komplette HTML quellcode
dann mit .find die gewünschte zeile ansteuern und zb nach den nächsten /TD
den wert übernehmen!

beispiel ist oben

im 3ten post
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Mittwoch 18. Februar 2009, 17:56

ich will die page leider ungern nennen, sorry. Aufjedenfall ist es ein Browsergame.

ich möchte nun per Cronjob von meinem vServer jeden Tag um die selbe Zeit darauf zugreifen die Daten auslesen und mir per Mail aufs handy schicken.

Da diese Datei sich aber auch jeden Tag ändert (Die Tabellenstruktur bleibt aber die Selbe) kann ich die Zeile nicht bestimmen.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mittwoch 18. Februar 2009, 19:14

das ist doch genau das oben genannte script was du brauchst wo liegt denn da dein problem

geh auf die HTML
Ansicht seitenquelltext anzeigen ZB im Firefox
die stelle suchen die du gern möchtest
1zeile davor den suchbefehl drauf ansetzen
find(text=re.compile("was halt da steht")).findNext("td")

und die nächste TD TR UR odder halt HTML TAG verarbeiten

so schwer ist das nicht
bf
User
Beiträge: 7
Registriert: Mittwoch 18. Februar 2009, 10:14

Mittwoch 18. Februar 2009, 22:48

Also mit python fange ich gerade erst an, daher kann ich dir keine Beispiele nennen. Aber vom Prinzip her ist das doch ganz einfach:

"fische" <tag x> aus string
gehe solange zeichen für zeichen weiter bis </tag x> kommt
sobald "..g x>" fertig ist, schreibe Zeichen für Zeichen dort hin wo du willst
Am Schluss "</tag x>" wieder rausnehmen oder vorher gar nicht mit rein schreiben lassen.

In Tags wie z.B. "<tag="bla" blubb="möp">" würde ich erstmal an den Leerzeichen Splitten, < > wegmachen, von " bis " Zeichen für Zeichen dorthin, wo es hin soll.

Allzuschwer dürfte sowas nicht sein, da sowas sogar in Bash kein unlösbares Problem darstellt.
lunar

Mittwoch 18. Februar 2009, 22:51

Man parst Markup nicht auf diese Weise, das ist viel zu instabil.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Mittwoch 18. Februar 2009, 23:35

Alternative:
Du konvertierst dein HTML zu XML mit HTML Tidy und verwendest einen XML-Parser.
http://www.ibm.com/developerworks/libra ... ptidy.html
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 19. Februar 2009, 00:40

Oder du nimmst lxml.html oder html5lib. Der Umweg über den XML-Parser ist IMHO recht aufwending, da nimmt man lieber einen brauchbaren Tagsoup-Parser.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten