| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

16-03-2010, 13:36
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
Daten aus Website auslesen - file_get_contents?
Hi,
ich hab eine Seite mit etlichen Links, die ich automatisiert auslesen und in einer mySQL Tabelle speichern will.
PHP-Code:
<?php
$sql = @mysql_connect("localhost", "root", ""); if($sql == false) { echo "Keine Verbindung zum SQL-Server"; exit(); }
$url = "http://www.linkseite.de"; $html = file_get_contents($url);
$startstring = "<td><a href=\""; $endstring = "\" title=\"zur Detailansicht";
echo $html;
?>
Sind 20 Links aus der Seite, jeweils innerhalb von start und endstring. Leider komm ich nicht mehr drauf, wie ich mir genau den Inhalt dazwischen abgreifen kann. Regex wird mittlerweile ja für sowas genutzt, damit komm ich jedoch nicht klar. Daher wollt ich's anders machen.
Jetzt hab ich in $html den gesamten Code der Seite als String. Jetzt müßte eine for each Schleife folgen, aber wie greife ich in dieser auf die Links zwischen den beiden Filterstrings zu?
|

16-03-2010, 13:40
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
|

16-03-2010, 14:35
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
PHP-Code:
<?php $url = "http://www.linkseite.de"; $html = file_get_contents($url);
$startstring = "gsid"; $endstring = "de&_bereich=A";
$posstart = strpos($html, $startstring); $posend = strpos($html, $endstring); $laenge = $posend - $posstart;
$link1 = substr($html, $posstart, $laenge);
echo $link1; ?>
Ok, denk soweit ist mir das Alles klar - das gibt mir jetzt schonmal was aus.
Der Aufbau der Links der Seite:
Die Ausgabe:
gsid=bb2.c.525368. - wodraus ich mir die zu sammelnden Links wieder zusammen setzen kann. Jetzt gibt's allerdings pro Seite 20 Links und nicht nur einen - eine for each Schleife wird benötigt?!
Wie ungefähr muß ich da jetzt ran gehen?
|

16-03-2010, 14:56
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
dafür nimmst du eine while-Schleife und brichst sie erst ab, wenn $posstart oder $posend false ergeben.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

16-03-2010, 15:19
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
PHP-Code:
$url = "http://www.seite.de"; $html = file_get_contents($url); $startstring = "gsid"; $endstring = "de&_bereich=A";
$posstart = strpos($html, $startstring); $posend = strpos($html, $endstring); $laenge = $posend - $posstart; $link1 = substr($html, $posstart, $laenge)."\n"; $dateiname = "test.txt"; $handler = fOpen($dateiname , "a+"); fWrite($handler , $link1); fClose($handler); ?>
so sieht mein Code jetzt aus, da cih jetzt erstmal nur alle Links
sammle, und dann später aus denen den Content hole, hab ich mir gedacht, ist es besser diese erstmal einfach Zeile für Zeile in eine .txt zu schreiben - ist das so gut gelöst oder funktionierender unsinn?
Jetzt zur Schleife:
PHP-Code:
while($posstart != false) { $link1 = substr($html, $posstart, $laenge); ...in Datei schreiben usw...
}
So stimmen kann das noch nicht, oder? Hier wird jedenfalls nicht weiter gespeichert dann.
|

16-03-2010, 15:32
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Du musst natürlich innerhalb der Schleife entweder den Suchstring kürzen (sonst findet er ja immer dasselbe) oder aber den dritten Parameter von strpos benutzen und damit festlegen, ab wo gesucht werden soll.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

16-03-2010, 15:42
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
Zitat:
Zitat von AmicaNoctis
Du musst natürlich innerhalb der Schleife entweder den Suchstring kürzen (sonst findet er ja immer dasselbe) oder aber den dritten Parameter von strpos benutzen und damit festlegen, ab wo gesucht werden soll.
|
Puh, kannst du mir da bitte ein klein wenig mehr zu sagen - so weiß ich nicht wirklich weiter. Nach dem ersten Durchlauf, hab ich start und end Position vom ersten Link, dann muß ab der Position weiter nach $startstring gesucht werden - von der Logik her richtig? Wenn ja wüßt ich aber dennoch nicht wie ich ansetzen sollte.
|

16-03-2010, 15:51
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Ich war sicher, dass die gegebenen Infos reichen würden. Wo liegt das Problem? Hast du mal im Handbuch nachgelesen, wofür der dritte Parameter gut ist?
PHP-Code:
$posstart = strpos($html, $startstring, $posend); $posend = strpos($html, $endstring, $posstart);
Mehr Code gibt's von mir aber nicht.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (16-03-2010 um 15:55 Uhr)
|

16-03-2010, 16:34
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
Zitat:
Zitat von AmicaNoctis
Ich war sicher, dass die gegebenen Infos reichen würden. Wo liegt das Problem? Hast du mal im Handbuch nachgelesen, wofür der dritte Parameter gut ist?
PHP-Code:
$posstart = strpos($html, $startstring, $posend); $posend = strpos($html, $endstring, $posstart);
Mehr Code gibt's von mir aber nicht.
|
Merci 
Klar hab ich's mir durch gelesen, will php lernen, nich ständig alles vorgekaut bekommen. Ich hatte's nur nicht ganz verstanden. Online in ein andres manual geguckt - passt.
An und für sich macht er jetzt ja was er soll, danke auf jeden Fall dafür.
Jetzt muß ich nur dafür sorgen, dass er das erste Ergebnis auch speichert, dass schaff ich alleine. Aber noch ein weiteres Problem:
<!DOCTYPE html PU
wird mir am Ende der Datei noch gespeichert.
PHP-Code:
$url = "http://www.seite.de/"; $html = file_get_contents($url); $startstring = "gsid"; $endstring = "de&_bereich=A";
$posstart = strpos($html, $startstring); $posend = strpos($html, $endstring); $laenge = $posend - $posstart;
while($posstart != false) { $posstart = strpos($html, $startstring, $posend); $posend = strpos($html, $endstring, $posstart);
$link1 = substr($html, $posstart, $laenge)."\n";; $zwischenpos = $posend + 1;
$dateiname = "test.txt"; $handler = fOpen($dateiname , "a+"); fWrite($handler , $link1); fClose($handler); }
?>
EDIT:
Ok, erster Hit wird auch gespeichert, klar das da nichts passiert, wenn ich die Speicherfunktion erst in der Schleife
habe, aber der erste Hit vorher gefunden wird.
Wie bekomm ich jetzt das "<!DOCTYPE html PU" weg?
Geändert von OnkelBenS (16-03-2010 um 17:21 Uhr)
|

18-03-2010, 14:27
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
string zerlegen - Probleme - doch regex?
Hey,
Bin gerad dabei Infos aus einer Website auszulesen. Dafür nutze ich
Start und Endpunkte und .
PHP-Code:
$startstringTE = "Telefon<"; $endstringTE = ">Fax";
$posstartTE = strpos($html, $startstringTE); $posendTE = strpos($html, $endstringTE);
$laengeTE = $posendTE - $posstartTE -69; $telefon = substr($html, $posstartTE + 16, $laengeTE);
echo "Telefon:".$telefon."<br><br>";
Während der Quelltext wie folgt aussieht:
HTML-Code:
<tr>
<th class="left">Telefon</th><td>(03210)1234567</td>
</tr>
<tr>
<th class="left">Fax</th><td>(03210) 1234567</td>
</tr>
Das klappt auch wunderbar, nur hab ich jetzt das Problem,
dass ich die Adresse in Anschrift, Postleitzahl und Ort zerlegen möchte.
HTML-Code:
<tr>
<th class="left">Adresse</th><td>Am Stadion 1<br />12345 wasauchimmer</td>
</tr>
Mit meiner bisherigen Lösung bekomm ich nur alles in einem. Wie zerlege ich
das am besten? Regex hab ich mir bereits angeguckt, kapier das aber leider nicht ganz.
Gibt's noch eine andere Möglichkeit bzw. kann mir wenn nicht jemand ein wneig unter die Arme
greifen was die regulären Ausdrücke angeht?
|

18-03-2010, 14:34
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
dachte mir schon, dass du mit strpos und substr nicht weiter kommst. Reguläre Ausdrücke sind anfangs etwas kompliziert, aber da muss man früher oder später sowieso durch und danach liebst du sie. Lies das Handbuch und ein paar Tutorials dazu. Das schaffst du schon.
Regenechsen ist vielleicht hilfreich für den Einstieg, aber das PHP Handbuch reicht auch und ist im Zweifelsfalle die zuverlässigere Referenz.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

18-03-2010, 14:48
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
|

18-03-2010, 15:13
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
Danke schonmal für die Antworten, ich seh ein, dass ich mich mit regex
beschäftigen sollte, heute reicht die Zeit dafür aber leider nicht mehr.
Daher geh ich jetzt doch den Weg den ich bisher gegangen bin mit strpos.
Die gesamte Adresse kann ich ja mit strpos auslesen. Hab
dann $adresse="Am Staddel 1<br />16225 Eberswalde"
Jetzt kann ich in einem 2ten Schritt doch genau Alles ansprechen
Straße von Start bis "<"
Postleitzahl von ">" bis 5 Zeichen später (PLZ hat immer 5 Stellen)
Ort von ">"+6 Zeichen bis Ende.
Hab mir als ich gemerkt hab, dass es doch recht einfach geht ziemlich
kräftig gegen die Stirn geschlagen
EDIT:
Hab's jetzt fertig, läuft wunderbar!
Geändert von OnkelBenS (18-03-2010 um 15:59 Uhr)
|

18-03-2010, 16:38
|
|
OnkelBenS
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 9
|
|
Daten in MySQL DB speichern
So, mein PHP Script findet nun alle Daten auf der Seite die er durchsuchen soll, nun sollen diese allerdings noch gespeichert werden. Aber irgendwie hab ich das Bedenken, dass ich falsch an die Sache ran gehe.
Was mein Script macht:
$urlTeil="1";
$url="http://www.seite.de/detail.php?ID=" .$urlTeil. "de";
$html = file_get_contents($url);
und jetzt sucht er sich 14 Stellen via strpos und substr, speichert
diese in jeweils einer Variablen. Das Ganze kommt dann noch in eine Schleife,
da die 14 vars von insgesamt 880 Seiten gezogen werden müßen.
Bau ich jetzt nachdem Graben immer wieder eine Verbindung zum MySQL
Server auf (xampp hier local), und schick alles einzeln per Insert in die DB?
|

18-03-2010, 16:47
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo nochmal,
ich versteh deine Frage nicht.
Außerdem musst du nicht wegen jeder Anschlussfrage ein neues Thema aufmachen, wenn man ohne die Kenntnis der anderen Themen sowieso den Zusammenhang nicht versteht.
Daher *join*
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|