![]() |
| | 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 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 397
|
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 |
| Christian Mühlroth 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 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
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 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 397
|
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 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
|
Vielleicht mal hiermit rumspielen: http://regex-tester.de/ |
| | |
| | Nach oben #10 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
|
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 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 397
| 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 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 397
|
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 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
|
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 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
ä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 |
| | |
| | Nach oben #18 |
| Oliver O. Registriert seit: 17.08.2005
Beiträge: 426
|
also, wenn du den $teststring benutzt, dann musst du auch Code: #<tr>\s*<td><a href="\#">(.+)<\/a><\/td>\s*<td>(\d+)<\/td>\s*<td>Mitglied<\/td># und eigendlich auch so.... denn wenn man über file_get_contents die seite liest, dann bekommt man ja den echten html code. wenn du aber htmlentities( file_get_contents ) benutzt, dann ist es was anderes. (kannst du testen, indem du via echo filestring; den inhalt anschaust, dann würd der Browser die seite aufbauen, und nicht den Quellcode der seite anzeigen) Geändert von Xean (08.02.2007 um 20:05 Uhr). |
| | |
| | Nach oben #19 |
| -Antichrist.Superstar- Registriert seit: 07.02.2007 Ort: .sH!
Beiträge: 29
|
also in dem kleinen test-script gehts mit dem PHP-Code: habe mich in meinem letzten post etwas doof ausgedrückt. dort habe ich ja bereits schon den filestring ausgelesen, und dort wird halt die gesamte website angezeigt, also der content, kein html code. sprich tabellen, links, etc. werden ausgegeben, nur die grafiken halt nicht (was ja klar ist). htmlentities() benutz ich ja eh nicht *fg da frag ich mich aber gerade, warum das ganze nicht so funzt, wie es soll. theoretisch kann es nichgt liegen, das der org. code, um einige zeilen länger ist, oder? weil der reg. ausdruck bleibt ja der gleiche, es sind in der tabelle halt selber immer verschieden viele spalten. der code auf der anfangsseite war zum testen da (der ist auch eins zu eins übernommen, hab halt nur einige spalten rausgenommen). wüsste nicht, dass das etwas daran ändern würde. ich hoffe ihr wisst was ich meine *fg LG |
| | |
| | Nach oben #20 |
| Johannes Schlichenmaier Registriert seit: 26.08.2005 Ort: Mannheim
Beiträge: 397
| Erklär das ma bitte. Weil das könnte schon ein Problem sein. Poste bitte mal folgende Sachen:
Weil ich find das grade etwas unübersichtlich. Danke, 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 |
| | |