| 

.NET C# Java Javascript Exception

9
Hallo,

ich möchte von einer Webseite in wiederkehrenden Zyklen bestimmte Informationen beziehen. Um dies zu bewerkstelligen verwende ich derzeit PHP und lade die Internetseite direkt in ein DOMDocument Object. Den DOMDocument Tree durchsuche ich dann nach einem speziellem Element welches immer den selben Namen hat, erstelle daraus ein weitere DOMDocument durch das ich mich mithilfe von DOMxpath bewegen kann um somit an alle benötigten Informationen zu kommen, solange ich den XPath angebe.

Soweit funktioniert auch alles, nur Funktionalität ist nicht alles, ich stelle mir deshalb ständig die Frage, "geht das nicht besser" ?
02.11.2009
The_Holy_One 393 1 6
jor 791 2 7
4 Antworten
7
Ich mache das normalerweise mit curl und anschliessendem Parsing mittels regexp.
Geht schön schnell und ist wenig code.

Beispiel:

$ch = curl_init("http://www.meine-seite.de/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
preg_match($pattern,$output,$treffer);
print_r($treffer);
02.11.2009
MiW 1,0k 1 8
2
Für einfaches "Quelltext-Laden" könnte auch die Funktion "file_get_contents()", die auch den Aufruf von URLs unterstützt, benutzt werden. Ansonsten hätte ich ebenfalls den Einsatz regulärer Ausdrücke vorgeschlagen.
Blauesocke 02.11.2009
curl hat den vorteil, daß es alle protokolle (http(s), ftp(s) usw.) kann und auch eine cookie und sessionverwaltung hat, also geeignet für Seiten auf denen erst eine Anmeldung erfolgen muß.
Ich nutze es ausserdem für einen crawler mit curl_multiexec um mehrere Siten gleichzeitig zu bearbeiten.
Das biete file_get_contents() leider nicht. Aber bei "einfachen" Seiten ist file_get_contents sicher die richtige Wahl.
MiW 03.11.2009
1
Naja Content-Klau ist immer mit relativ viel Aufwand verbunden, da man sich nie sicher sein kann, ob der Eigentümer die Struktur beibehält. Außerdem ist es nicht die feine Art.

Evtl. kommst du ja besser, wenn du den Eigentümer einfach mal anschreibst und fragst ob er ein Webservice bereitstellen kann ?

Ansonsten geht es nicht anders als das Dokument herunterzuladen und dann zu parsen.
Das parsen kann man nun auf unterschiedliche Weise tun. Entweder man hangelt sich an der HTML Struktur entlang oder man holt sich den Inhalt mit einer Regex anhand von Ankerpunkten.

MfG
02.11.2009
Blue 321 1 5
1
Ich habe bereits die Erlaubnis, muss aber mit der von dir oben erwähnten Einschränkung leben das wenn der Besitzer die Homepage verändert ich die Struktur entsprechend auch in meinem Code abändern muss.

Die Idee mit dem WebService habe ich aber noch nicht gehabt, evtl. kann ich Ihn ja dazu bewegen sich einen von mir Programmieren zu lassen. Ich hätte dann mein benötigtes DataSet und er wiederum ein weiteres Feature.
The_Holy_One 02.11.2009
4
Mir kommen aber etliche Sachen in den Sinn wo man das brauchen kann ohne das es Content-Klau ist.
GENiALi 02.11.2009
@Geniali: Ein Beispiel: Du schließt als Firma X einen Vertrag mit einer Firma Y ab. Diese soll dir zum Beispiel Börsen-Informationen für dein System bereitstellen. Nun ist die Firma Y aber nicht in der Lage (magels kopetenten Mitarbeiten, technischer Schwirigkeiten, etc) die Informationen direkt in einem maschinenlesbaren Format darzubieten. Ergo baust du dir einen Parser der die Informationen in eine maschinenlesbares Format zur weiteren Verarbeitung überführt. Da du einen Vertrag hast ist es erlaubt un KEIN Content-Klau! (Btw. das ist ein Beispiel aus der Praxis)
Floyd 01.03.2010
1
DOMDocument setzt vor allem voraus, dass das, was du da lädst, ein valides XML-Dokument ist, was du ja prinzipbedingt nicht garantieren kannst. Daher würd ich es eher mit paar cleveren RegEx' versuchen.
04.02.2011
Laph 11 1
0
Du kannst auch eine Bibliothek verwenden, wie beispielsweise:
http://simplehtmldom.sourceforge.net/
04.02.2011
Sunny 31 2

Stelle deine Php-Frage jetzt!