![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
nabend,
ich hätte da mal eine frage zu dem tutorial: [php] Fremde Webseiten auslesen soweit ist es ja recht klar und verständlich, nur habe ich probleme damit, einige seiten auszulesen. wenn ich z.b. eine tabelle habe, die so aussieht: Code:
<table class="table" width="420" border="0" cellspacing="1" cellpadding="3">
<tr>
<td colspan="3"><b>Mitglieder</b></td>
</tr>
<tr>
<td width="50%"><b>Spieler</b></td>
<td width="20%"><b>Punkte</b></td>
<td width="30%"><b>Status</b></td>
</tr>
<tr>
<td><a href="#">Nick1</a></td>
<td>74</td>
<td>Mitglied</td>
<tr>
<td><a href="#">Mitglied5</a></td>
<td>85</td>
<td>Mitglied</td>
<tr>
<td><a href="#">User80</a></td>
<td>745</td>
<td>Mitglied</td>
</table>
also das er mir das z.b. so ausgibt: Nick1, 74 Mitglied5, 85 User80, 754 irgendwie hab ich schon gegoogelt, mir x funktionen angeguckt, aber nie habe ich es geschafft... vllt. könnt ihr mir ja weiterhelfen. LG Geändert von Jann Hendrik (03.09.2008 um 15:17 Uhr). Grund: link aktualisiert |
|
|
|
|
|
Nach oben #2 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
Also wenn du weißt, dass die Tabelle so aussieht, kannst du das ganze durch einen preg_match_all() laufen lassen.
Dazu müsstest du dich aber ein wenig mit Regulären Ausdrücken auskennen. Der würde dann ein wenig so aussehen: Code:
<tr>\s*<td><a href="#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td>\s*<td>Mitglied<\/td> Code:
Array
(
[0] => Array
(
[0] => <tr>
<td><a href="#">Nick1</a></td>
<td>74</td>
<td>Mitglied</td>
[1] => <tr>
<td><a href="#">Mitglied5</a></td>
<td>85</td>
<td>Mitglied</td>
[2] => <tr>
<td><a href="#">User80</a></td>
<td>745</td>
<td>Mitglied</td>
)
[1] => Array
(
[0] => Nick1
[1] => Mitglied5
[2] => User80
)
[2] => Array
(
[0] => 74
[1] => 85
[2] => 745
)
)
Hoffe ich konnte helfen, Jojo
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
Nach oben #3 |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
danke für deine antwort...
habe mal einfach deinen ausdruck übernommen, da ich die regulären ausdrücke noch nicht ganz verstehe (#zum teil schon, aber net ganz). nun bekomme ich den fehler: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '\' in C:\xampp_apache\xampp\htdocs\test\getit.php on line 24 mein code sieht jetzt so aus: PHP-Code:
|
|
|
|
|
|
Nach oben #4 |
|
Erfahrener Benutzer
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
|
Die fehlt ein Modifier bzw die Begrenzungezeichen (weiß gerade nicht, wie die heißen). D.h. du darfst PHP nicht
Code:
<tr>\s*<td><a href="#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td>\s*<td>Mitglied<\/td> Code:
#<tr>\s*<td><a href="\#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td>\s*<td>Mitglied<\/td>#
__________________
http://www.ChrisDiary.De |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Hier mal ein Link zu regulären Ausdrücken. Da schau ich öfters mal rein.
http://www.regenechsen.de/phpwcms/index.php?regex_allg |
|
|
|
|
|
Nach oben #6 |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
danke für eure antworten.
habe mir die regulären ausdrücke nochmal genauer angeschaut, und habe nun auch die logik eigentlich ganz gut verstanden. zumindest weiß ich was: Code:
#<tr>\s*<td><a href="\#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td># habe das ganze nun so umgebaut, also so wie ich es zumindest verstanden habe: PHP-Code:
der gesamte code sieht so aus: PHP-Code:
|
|
|
|
|
|
Nach oben #7 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
Dir fehlt der Modifier U, der die Gier unterdrückt, sonst versucht er einen Quantifier immer auf das Maximale auszureizen, was aber darin endet, dass der Rest des Ausdrucks nicht mehr passt.
Schreib nach dem hinteren # ein U, dann sollte es gehen. Grüße, Jojo
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
Nach oben #8 | |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
Zitat:
nuja, habs mal angehangen und das auch nochmal gelesen, was das U genau vorhat, bzw. wofür es gut ist. es klappt aber dennoch nicht... |
|
|
|
|
|
|
Nach oben #9 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Vielleicht mal hiermit rumspielen: http://regex-tester.de/
|
|
|
|
|
|
Nach oben #10 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
ich bin da ja auch nicht der Brüller in der Thematik, aber folgendes funktioniert bei mir einwandfrei:
RegEx: Code:
<tr>\s*<td><a href="\#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td>\s*<td>Mitglied<\/td>
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! Geändert von Ben (08.02.2007 um 07:43 Uhr). |
|
|
|
|
|
Nach oben #11 |
|
leftover when bar closes
Registriert seit: 29.06.2006
Ort: Bern
Beiträge: 123
|
Die regex stimmt prinzipiell schon so - den U flag brauchst du in diesem Fall auch nicht zwingend zu setzten, da die Suche durch <\/td> bereits korrekt abgegrenzt wird.
Versuche aber mal folgende Regex am Quelltext der Seite aus: PHP-Code:
Gruss
__________________
Unkraut ist die Opposition der Natur gegen die Regierung der Gärtner. ticketbörse |
|
|
|
|
|
Nach oben #12 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
Also ich habs im Regextester ohne U nich hinbekommen!
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
Nach oben #13 | |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
danke für eure zahlreichen antworten,
doch langsam habe ich das gefühl das irgendein server net mitspielt. wenn ich mit echo die gesamte liste ausgebe funzt es. mit preg_match_all irgendwie net mehr. egal welche ausdrücke ich nehme... er zeigt einfach nichts an. kann es vllt. denn an der seite liegen, dass der das unterbindet? mit dem code bekomme ich nur: PHP-Code:
Zitat:
Geändert von Ben (08.02.2007 um 16:01 Uhr). Grund: Adresse zensiert |
|
|
|
|
|
|
Nach oben #14 |
|
Irgendwas mit e
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 393
|
also wenn du den Content einer Seite in ne Variable speichern kannst, dann hat das in dem Moment nix mehr mit dem fremden Server zu tun.
Dann ist das schlichtweg ein String in deinem Programm. Versuch doch erstmal, einen Code mit einem vorgegebenen String zu erstellen, der funktioniert. Wenn das geht, dann weißt du, dass es theoretisch funzt. Dann kannst du dir den String von nem anderen Server holen. Und gib den String mal mit var_dump() aus, vielleicht ist das Empfangene einfach irgendwie komisch formatiert, sodass der Regex nicht anspringt....
__________________
In the beginning was the word and the word was content-type: plain/text heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int |
|
|
|
|
|
Nach oben #15 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
ist in $filestring auch was drin?
Bist du sicher, dass er die Daten auch vom anderen Server ausgelesen hat?
__________________
Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
|
|
|
|
|
Nach oben #16 |
|
Mensch
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
|
ähm mal ne ganz dumme Frage:
Mit dem Link den du da oben postest kommt man in das Game rein und kann dinge bauen. Ich würde ganz schnell den link zensieren, sonst kommen welche auf dumme ideen... [EDIT] Habe ich gemacht, Ben.
__________________
I did it my way - Senseless-Blog Geändert von Ben (08.02.2007 um 16:02 Uhr). Grund: Information zur Zensur eines obigen Beitrags hinzugefügt |
|
|
|
|
|
Nach oben #17 |
|
-Antichrist.Superstar-
Registriert seit: 07.02.2007
Ort: .sH!
Beiträge: 29
|
PHP-Code:
gebe ich den string mit var_dump aus, steht ganz oben: string(8119) "" und danach alles wie gehabt. in $filestring ist die komplette website drinne. wenn ich diese ausgebe, dann bekomme ich halt die ganze seite angezeigt. ja, ich bin mir sicher, da ich mit echo $string ja auch die daten erhalte *fg wegen dem einloggen war mein fehler, hatte vergessen den server zu entfernen, bzw. die session zu schließen. ist aber alles noch im grünen bereich. LG |
|
|