WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Content grabben » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Content grabben
von languitar
Ansonsten ist mir gerade noch ne andere möglichkeit eingefallen.

1. die Seite in einen String laden
2. Nach dem Suchmuster durchsuchen
3. Ergebnis speichern
4. alles bis zu dem Ergebnis vom String abschneiden
5. im Verkürzten String nach dem Muster weitersuchen, bis es keine neuen Ergebnisse mehr gibt.
von c3o
Ja. Regular Expressions wie du sie gepostet hast sind da natürlich besser, die konnte ich nur damals noch nicht (ist über ein Jahr alt)
von languitar
Um zum Thema zurück zu kehren:

Wenn ich gerade beim drüberfliegen keinen Knick in der Optik hatte, dann ist das Problem, dass der Code von c3o maximal ein zutreffendes Reultat pro Zeile erlaubt, es werden aber mehrere Ergebnisse pro Zeile benötigt...
von Rieke
ich bin nicht ausfallen geworden, ich war nur überrascht und habe mir daraufhin deine alten Postings durchgelesen und gemerkt das dir das schonmal gesagt wurde ... es schien so als müsse man es offensichtlich nochmal wiederholen... hier wird halt gerne bei Problemen geholfen und dabei geben sich einige Leute hier verdammt viel Mühe jemandem Details zu erklären und sogar Code Teile werden gelegendlich neu geschrieben um jemandem zu helfen der sich wirklich Mühe gibt und festhängt ..
Nur einen kostenlosen ScriptService bietet das Forum irgendwie nicht an, ist auch nicht Sinn des ganzen.. ich denke das einmal wieder grade zu stellen, ist nicht unbedingt als "Ausfallend" zu bezeichnen.
von pajas
sorry, war ja nur eine frage..... nicht gleich so ausfallend werden bitte!!
von Rieke
noch genauer ? "fertige Lösung" ?
Wie man dir schon in älteren Postings hier versucht hat zu erklären .. das hier ist ein Forum in dem man sich versucht gegenseitig zu helfen, wir sind nicht dazu da fertige Lösungen für dich schreiben ... wenn du natürlich jemanden mit einer Auftragsarbeit beehren willst, findest su sicherlich jemanden der sich anbietet.
von pajas
Hallo Zusammen!

Habe auch schon lange nach so etwas gesucht, leider kann ich mit dem oben nichts anfangen. könnte mir jemand die genaue lösung ins forum schreiben? Besten Dank euch allen!
von Philipp Gérard
c3o schrieb am 20.02.2004 13:05
Es freut einen immer wieder, alten eigenen Code in der Anwendung zu sehen

hehe ;)
von bastir
Es gibt für dieses Vorgehen auch eine andere Klasse die sehr gut für das Content Grabbing eingesetzt werden kann.

Suche mal nach Snoopy Class oder so. Habe ich mal benutzt und war mehr als zufrieden.

So long

-------- schnipp
Hey, mein 100. Posting Darauf werde ich mal einen Kaffee trinken
-------- schnapp
von c3o
Es freut einen immer wieder, alten eigenen Code in der Anwendung zu sehen
von patrickpaulsen
Folgendes mal aus meiner Bibliothek.. ich musste allerdings ganz nach oben auf die Leiter steigen, um die unendliche Geschichte (dieser dicke Welzer) hier jetzt ins Forum zu posten

Also....

Einleitung

Oftmals ist es sehr sinnvoll und nütlich verschiedene Inhalte von fremden Webseiten auslesen zu können.

Die Theorie

Das hier vorgestellte PHP-Skript durchsucht eine Quelle nach einer bestimmten Zeichenfolge. Dadurch ist es möglich, gewisse Teile einer Webseite zu speichern bzw. weiterzuverarbeiten. Das Problem liegt im Großen und Ganzen eher darin, dass die wenigsten Webseiten einfache Möglichkeiten bieten, damit das Auslesen Ihrer Daten recht einfach ist. Am einfachsten würde es bei XML-Dokumenten funktionieren, die in etwa so aussehen (könnten):
<artikel> <headline>Hier die Headline</headline> <text>Text des Artikels</text></artikel>
Bei dieser Variante könnte man das Skript anweisen, nach "<headline>" zu suchen und alles, was bis </headline> steht, herauszufiltern. In der Praxis sieht es leider anders aus. Man muss also ein Muster finden, wie die herauszulesenden Daten auf der Webseite gespeichert sind. Solche Muster können bestimmte Schriftarten, -größen oder Textklassen sein, die im HTML-Code definiert werden (denn das ist, was das Skript liest!).

Das wichtigste an der Sache ist, dass die Zeichenkombination möglichst einzigartig auf der Webseite ist - wenn nicht, werden auch Informationen ausgelesen, die nicht relevant sind (z.B. wenn man nach <b> und </b> suchen lässt, erhält man alle Zeichen, die als "Fett" markiert sind). Anzumerken ist, dass natürlich auch nach regulären Wörtern wie "Linie" (siehe Beispiel) gesucht werden kann.

Die Praxis

Ich habe mit dieser Materie beschäftigt, da ich die Kontrollen der hiesigen U-Bahnen von deren Webseite auslesen und mir entsprechend zuschicken wollte. Die Informationen sind/waren unter http://www.vormagazin.at/html/heute.php?item=fahrschein verfügbar.

Wenn man sich den HTML-Code ansieht, bemerkt man schnell, dass allen Einträgen wie "Linie XY" mit "<span class="lead">" beginnen. Das ist genau der Punkt, den ich oben erwähnt habe - man muss ein Muster finden, woraus das Skript die relevanten Daten auslesen kann. Ich bin dankbar, dass diese Text-Klasse nur bei den Linien verwendet wird - das macht die ganze Sache enorm einfach.

Der Code

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41:
// URL, die durchsucht werden soll
$url = "http://www.vormagazin.at/html/heute.php?item=fahrschein";

// Zeichenfolge vor relevanten Einträgen
$startstring = "<span class=\"lead\">";

// bis zum nächsten html tag bzw. Zeichenfolge nach relevanten Einträgen
$endstring = "<"; 

$file = @fopen ($url,"r");

if (trim($file) == "") {
	echo "Service out of order";
	} else {
	$i=0;
	while (!feof($file)) {

		// Wenn das File entsprechend groß ist, kann es unter Umständen		// notwendig sein, die Zahl 2000 entsprechend zu erhöhen. Im Falle
		// eines Buffer-Overflows gibt PHP eine entsprechende Fehlermeldung aus.

		$zeile[$i] = fgets($file,2000);
		$i++;
	}
	fclose($file);
}

// Nun werden die Daten entsprechend gefiltert.

for ($j=0;$j<$i;$j++) {
	if ($resa = strstr($zeile[$j],$startstring)) {
		$resb = str_replace($startstring, "", $resa);
		$endstueck = strstr($resb, $endstring);
		$resultat .= str_replace($endstueck,"",$resb);
		$resultat .= "; ";
	}
}

// Ausgabe der Daten

$resultat = "Kontrolliert wird heute in den Linien ".$resultat."nicht erwischen lassen!";
return $resultat;


von Philipp Gérard
Nein, so nicht. So erhält er alle Zahlen in wirren Kombinationen. Du musst ein Muster finden, den Seitenquelltext danach auslesen und die Webmarken (die Zahlen) mitschneiden um die Reihenfolge usw. nicht zu verändern...aber bis ich mich mit Lotto beschäftige...
von languitar
Also, hier erst mal das grundsätzliche Konzept:

1. Du musst in dem ganzen Quellcode Begrenzungen für die, für dich relevanten Zahlen finden.
2. Du musst die Datei einlesen und mit preg_match_all() auswerten.

Das hier ist die für dich relevante Seite: https://www.swisslotto.ch/servlets/IslServlet?pageid=63&lastnumber=true

Naja und die preg_match_all-Anweisung könnte so aussehen:

1:
preg_match_all('#https://www.swisslotto.ch/isl_images/D/kugeln/[0-9]+.gif#', $stringdateiinhalt, $arraymitergebnissen);


Das $arraymitergebnissen lässt du dann zum testen gerade mit
1: 
2: 
3:
echo "<pre>";
print_r($arraymitergebnissen);
echo "</pre>";
ausgeben und suchst dir die für dich relevanten Keys raus.
von dnue
hab mal versucht mit fopen() und preg_match_all()
aber ich blick nicht durch.
Hat nicht jemand was bereits brauchbares zu Hand, was noch abgeändert werden kann.
Mach diese Arbeit gratis für einen Verein, und leider kenne ich mich nur mit html und sehr wenig mit php aus.

Für eure Hilfe Danke ich jetzt schon.
Dani
von dnue
Hi und Danke für die Antwort
versuchs mal mit folgendem Link:
http://www.swisslotto.ch/servlets/IslServlet?pageid=1&action=rgisterplayer&lang=2

sollte direkt das Frame geöffnet werden.

Danke
von chip
Also ich glaube, das wird so nicht gehen. Er soll eine GIF-Grafik einlesen und dann versuchen, die Zahl die da steht zu "interpertieren". Nee. Man könnte, falls vorhanden, vielleicht den ALT- bzw. den TITLE-Tag einlesen und dann ausgeben.
Ich konnte auf der Seite übrigens keine GIF-Grafiken mit Zahlen sehen (man muss sich erst registrieren. -> weiteres Problem [vielleicht automatischer Login?] )

// edit
@ Philipp: schade, war grad beim Schreiben, aber zu langsam

// nochmal edit:
OK hat sich erledigt. zahlen sieht man bei Statistik
von Philipp Gérard
die Bilder würde ich nicht einlesen, eher die alt-tags. das Funktioniert mit fopen() und preg_match_all()
von dnue
Hi Zusammen
Wer kann mir helfen ein Script in php zu schreiben, dass mir content von einer fremden Seite liefert. Oder kennt jemand einen guten workshop?
Genauer gesagt gehts um die Auswertung der Lottozahlen.
Die Zahlen sind als gif auf der Seite dargestellt.
Wie kann ich nun die Bilder"einlesen" und z.B. als Zahl auf meiner Seite ausgeben.
Es geht um folgende Seite:http://www.swisslotto.ch/servlets/IslServlet?pageid=1&action=rgisterplayer&lang=2

Danke bin noch PHP Anfänger und für jeden Tipp dankbar.

Dani



Nach oben