Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[cURL] Bestimmte Daten einer Seite holen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-consult PHP Entwicklung
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[cURL] Bestimmte Daten einer Seite holen


 
Daether
18-07-2006, 10:13 
 
H,
nachdem mir das letzte mal schon so gut geholfen wurde,hoffe ich heute auch wieder auf eure mithilfe.
Folgendes Problem, ich solle mit cURL von einer Seite die Namen und Addressen holen:
http://www.rechtplus.de/kanzleiverzeichnis/anwalt_normal.php?suche=1&suchbegriff=012&anwaltnorname=&treffer=92&submit=no&ltd_idx=1&ltd_inc=20&auswahl=
ich habe es schon geschafft, cURL zu installieren per apt-get install curl und php5-curl. De nfolgenden Code habe ich nun soweit gefunden und zusammengestellt:
$curlhandle = curl_init("http://www.rechtplus.de/kanzleiverzeichnis/
anwalt_normal.php?suche=1&suchbegriff=012&anwaltnorname=
&treffer=92&submit=no&ltd_idx=1&ltd_inc=20&auswahl=");
$hp = fopen("example_homepage.txt", "w+");
curl_setopt($curlhandle, CURLOPT_FILE, $hp);
curl_exec($curlhandle);
curl_close($curlhandle);
fclose($hp);
Das mit der Datei könnte ich eigendlich noch weglassen, da ich bis jetzt nur die ganze Homepage auslese, aber so kann ich überprüfen was cURL gemacht hat.
Auf dieser Seite (http://www.dynamicwebpages.de/php/function.curl-setopt.php) habe alle möglichen Optionen die ich für dne Transfer habe durchgesucht, habe aber keine gefunden, die mir zumindest den HTML-Code entfernt oder ähnliches.
Also meine Frage ist, ob es eine Möglichkeit mit cURL gibt, nicht den ganzen Code auszulesen, sondern nur die Daten die ich brauche.
Oder muss ich nun eine PHP-Funktion schreiben, die mir die ganze Homepage umschreibt?
Hoffe ihr könnt mir helfen.
MfG Daether

 
devjam
18-07-2006, 12:57 
 
Soweit ich weiß musst Du wohl oder übel eine Funktion schreiben, die Dir den Inhalt, den Du haben möchtest extrahiert.
Stichwort: RegEx !!! :teach:

 
Daether
18-07-2006, 13:05 
 
//edit1 :
Entschuldigung, sollte in meinen anderen Thread.

 
jahlives
18-07-2006, 13:15 
 
[...]
habe aber keine gefunden, die mir zumindest den HTML-Code entfernt oder ähnliches.

Hast du dir strip_tags() mal angeschaut. Scheint mir genau das zu machen was du willst.

Also meine Frage ist, ob es eine Möglichkeit mit cURL gibt, nicht den ganzen Code auszulesen, sondern nur die Daten die ich brauche.
Oder muss ich nun eine PHP-Funktion schreiben, die mir die ganze Homepage umschreibt?

Ich tippe schwer drauf, dass du dir eine eigene Funktion schreiben musst (obwohl ich CURL nicht wirklich kenne).
Um das zu machen gibt es diverse Funktionen:
strpos()
substr()
preg_match()
die dir helfen könnten.

Gruss

tobi

 
Daether
18-07-2006, 13:28 
 
Hi,
erstmal danke für eure hilfen.
Hab gerade eher durch zufall noch etwas nettes gefunden
fgetss(). Wenn ich über diese Funktion die Homempage aus einer Datei auslese werden die Tags automatisch entfernt.

 
devjam
18-07-2006, 14:50 
 
... ist zwar nett, aber dann hast Du doch kaum Anhaltspunkte, woher Du die einzelnen Daten extrahierst. Oder habe ich etwas falsch verstanden?

 
Daether
18-07-2006, 15:01 
 
ok, ich habe es jetzt geschafft, die Daten so wie ich es fast möchte in einen Array zu packen.

$suchmuster_adresse = ('|^Kanzlei|');
$suchmuster_name = ('|^[a-z]+,{1}.+$|i');
$counter = 0;

while ($row = fgetss($hp,1000)){
$row = trim($row);
if (preg_match($suchmuster_name,$row) == 1){
$datenarray[$counter][0]= $row;
}
if (preg_match($suchmuster_adresse,$row) == 1){
$datenarray[$counter][1]= $row;
$counter++;
}
}

Hier noch einmal die Seite von der ich die Daten haben möchte:
klick mich (http://www.rechtplus.de/kanzleiverzeichnis/anwalt_normal.php?suche=1&suchbegriff=012&anwaltnorname=&treffer=92&submit=no&ltd_idx=1&ltd_inc=20&auswahl=)

mal ein Auszug was dabei rauskommt:
Array (
[0] => Array ( [0] => Munz, Christoph [1] => Kanzlei: Munz, Hille & Partner GbR, Gustav-Adolf-Str. 6 b, 01219 Dresden )
[1] => Array ( [0] => Reis, Florian [1] => Kanzlei: Reis, Neuostra 18, 01219 Dresden )
[2] => Array ( [0] => Sauer, Klaus [1] => Kanzlei: Sauer, Schmalwiesenweg 24, 01219 Dresden )

Mein nächstes Problem was ich nun habe ist, dass ich alle Daten in wieder einen assoziativen Array packen will der aus 6 Teilen besteht:
Vorname, Nachname, Kanzlei, Strasse, Plz, Ort
Habe schon daran gedacht mit explode zu arbetien und die Strings nach "," zu trennen, hilft mir aber auch nicht weiter, da z.B. der erste Kanzleiname ein "," hat.
Jemand ne Idee wie ich das nun trenne?

Sinn ist es später die Daten so in eine Datenbank zu schreiben, daher möchte ich so eine Art vorbereitenden Array machen aus dem ich später einfach nur Zeile für Zeile einbauen muss.

@devjam:
Ich glaube du hast mich etwas missverstanden. Im Endeffekt ist es mir egal "woher" ich alles habe. Wichtig ist nur, dass alles geordnet ist und so umgewandelt wird, dass ich es in eine Datenbank schreiben kann.

 
jahlives
18-07-2006, 15:12 
 
Zähle die Kommas die in jedem Eintrag vorkommen

$anzahl = substr_count($adresse,',');

Idealerweise sollten es deren 2 sein. Wenn es 3 sind, dann weisst du, dass der Name auch ein Komma enthält.
In diesem Falle würde ich die Komma Position mittels strpos() ermitteln und das Komma gegen ein anderes Zeichen tauschen. Dann sollte das explode() mit , funzen

Gruss

tobi

 
Daether
18-07-2006, 15:19 
 
cool, danke für den Tip. Man lernt eben immer noch mehr dazu :D .

//Edit 1:
Jetzt brauche ich noch ein letztes mal Hilfe zu diesem Projekt.

Ich schreibe die Daten die ich ausgelesen habe in eine Datenbank und dort steht dann z.B. unter Name:
 Christoph   
Die   will ich weg habe, also habe ich :
preg_replace("| |","",$dbarray[$i]['Nachname']);
gemacht.
Nun sind die Zeilen aber nicht nur von   befreit sonder auch vom Namen an sich! Wie kriege ich das hin, dass nur der Name da steht?
MfG Daether


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:39 Uhr.