Datei auslesen nach Links und Text

son gohan

Erfahrenes Mitglied
Hallo Forum,

ich habe ein Script mit dem ich alle Dateienamen aus einem Verzeichnis auslese und in eine .csv Datei abspeichern kann.

Das Script sieht so aus:
PHP:
<?php

$dateiname = "sitemap.csv";
$scriptname = "indizierung.php";

$handle=opendir('.');
$dateihandle =  fopen ($dateiname, "a");

while ($file = readdir ($handle)) {

	if( ($file != "." && $file != "..") && (ereg('\...$', $file) || ereg('\....$', $file) || ereg('\.....$', $file )) && ($file != $scriptname) && ($file != $dateiname) ) {

    	$string = file_get_contents($file,"r");

        preg_match("/<title>(.+?)<\/title>/is", $string, $substring);

        if(!empty($substring[1])) {
            $ergebnis = $string = html_entity_decode($substring(1]);
            $dateischreiben = $ergebnis.";".$file."\n";
            fputs($dateihandle, $dateischreiben, strlen($dateischreiben));
            echo "Die Datei: <b>".$file."</b> enthält folgenden Titel: <b>".$ergebnis."</b><br>";
        }
   }
}
closedir($handle);
fclose($dateihandle);

?>

Jetzt will ich aus einer HTML Datei die Linkadresse und den Linktext einer Linkliste auf gleiche Weise auslesen und in eine .csv Datei abspeichern.

Die Linkliste die ich auslesen will sieht so aus:

PHP:
<ul>
<li><a href="linkadresse.html">Linktext</a></li>

<li><a href="linkadresse.html">Linktext</a></li>
</ul>

Nun, leider komme ich nicht weiter, wer kann mir bitte sagen wie ich die Linkadressen und Linktexte alle in eine gelistete .csv Datei bekomme, oder nur in eine .txt Datei.
 
Ich wuerde erstmal alle Links extrahieren und dann einen nach dem anderen in seine Bestandteile zerlegen.
Regulaere Ausdruecke sind dafuer meiner Meinung nach eine gute Sache. Mit preg_match_all() kannst Du alle Treffer fuer einen Ausdruck bekommen.
Der folgende regulaere Ausdruck sollte auf Deine Links zutreffen.
Code:
<a href=['"][.:/\w]+['"][>][\w]+</a>
Dabei wird aus dem hier:
HTML:
<li><a href="linkadresse.html">Linktext</a></li>
das hier
HTML:
<a href="linkadresse.html">Linktext</a>
Also lediglich der Link selbst bleibt uebrig.
Der naechste Schritt ist nun alle Links in einer Schleife durchzuarbeiten und in ihre Bestandteile zu zerlegen.
Dieser Ausdruck
Code:
['"][.:/\w]+['"]
gibt Dir dann folgendes zurueck:
Code:
"linkadresse.html"
Und schliesslich dieser Ausdruck
Code:
[>][.:/\w]+[<]
den Text:
Code:
>Linktext<
Wie Du siehst sind sowohl bei der Addresse als auch beim Text noch Artefakte uebrig, aber diese abzuschneiden stellt ja kein Problem dar.
Und so bekommst Du dann nach und nach fuer jeden Link den URL und den Text.
 
Weiteres zerlegen.

Hallo.

Ich bin gerade dabei eine Klasse zu schreiben, die es ermöglichen soll, einen Link in seineBestandteile zu zerlegen.

Ich will auch mit regulären Ausdrücken arbeiten, krieg es aber irgendwie nicht gebacken, da ja zb. die Attribute in versch. Reihenfolgen vorkommen können.
Wie löse ich das Problem der variablen Reihenfolge?


Ein weiteres Problem stellt der Auslesevorgang hinsichtlich der Performance da.


Meine Idee war folgende:
Da reguläre Ausdrücke ja ressourcenfressend sind, will ich egtl nur einen preg_match_all() für die Suche der Links in einem Quelltext verwenden. ( Funktioniert auch bisher ).

Nun aber weiter.

Soll ich in diesem preg_match_all() auch gleich eine etwaige Zerlegung des Links in seine Attribute vornehmen. ( wie mach ich das hinsichtlich des oben genannten Problems) ,
und dann die einzelnen Arrayelemente vergleichen? ( Umgang mit Arrays ist mir bekannt)
Oder mit mehreren reg Exps arbeiten?

Ich dachte an eine Lösung mit nur einem regulären Ausdruck und dann mit Arrayroutinen, die - geschickt eingesetzt - den Rest übernehmen.

Für konstruktive Ideen bin ich gerne offen.

Gruß Lars
 
Zuletzt bearbeitet:
Zurück