Neuigkeiten:

still alive...

Hauptmenü

Links herausfiltern

Begonnen von styla, 30. April 2006, 18:27:56

Vorheriges Thema - Nächstes Thema

styla

Hallo,
ich möchte von einer Webseite alle Links heraufiltern welche es dort gibt und diese untereinander ausgeben.
Dazu öffne ich die URL per fopen und lese den Inhalt ein.
Gibt es eine Möglichkeit die Links herauszufiltern ohne das ich reguläre Ausdrücke verwenden muss, oder komme ich da nicht rum ?

mahe

Spontan würde mir da zwar eine Methode einfallen ohne regex, allerdings geht das mit regex (zB preg_match_all()) wesentlich bequemer und einfacher ...
ohne regex wirst du brauchen stripos() und substr() in einer while().
Mit regex wärs halt nur eine Zeile Code /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


styla

Hi, also ich versuchs gerade mit regex aber irgendwie kriege ich das nicht hin. Hab mit regex noch nicht so viel gearbeitet, hast du eventuell ein gutes Tutorial, denn ich hab schon einige angeschaut aber wirklich was gelernt habe ich nicht.
Hier mein Versuch:
Ein Link ist ja wie folgt aufgebaut:
hihihih
so jetzt mein regex:
 


$regex = \"!!i\";

 
 
Delimiter: !
Meine Gedanken:
 zeichen zum schluss. der rest des links ist ja egal ich will ja nur die url haben.
 
Nur irgendwie funzt das ganze nicht. Wo liegt mein Fehler ? Habe ich einen Denkfehler oder wo ist das prob.
Danke schonmal.
mfg
STyla

mahe

Versuchs mal mit etwas in der Richtung:
!!iU
Ist ungetestet, sollte aber hinkommen.
Die Form  ist nich zwingend ... da könnte genauso  oder  usw. stehn
genausogut kann der href-Teil auch erst in der nächsten Zeile stehn /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


styla

Hi, danke das funktioniert. Jedoch verstehe ich die Funktionsweise nicht.
Ich hab jetzt ein Array mit 2 Schlüsseln und beim zweiten steht jeweils die url.
Wie funktioniert das wenn ich jetzt noch den titel des links herausfiltern will ?
!(.*)!iU
hab ich jetzt probiert, dann wird wieder nichts angezeigt. Wo mach ich denn immer den Fehler ?
mfg
STyla

mahe

afaik musst du den / nicht escapen.

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


styla

hmm ok jetzt funzt es.
Jetzt hab ich noch paar andere Fragen was vielleicht auch mit regex zu tun haben. Ich möchte das ganze nutzen um einen Webcrawler zu bauen, sprich ich gebe eine Url und er holt sich die unterurls. Dann durchsucht er die und holt sich jeweils immer den pagecontent.
Ich hab das probeweise mal in ner schleife getestet. Jedoch hängt er sich sofort auf oder er kann nichts machen weil die urls in form von /s/a/fhhkh sind, also ohne http:// oder www. davor und bei ms sind sogar noch zahlen etc. davor.
Hast du eine Idee wie ich das lösen kann, oder einen Denkanstoß zum entwickeln ?
Danke.
mfg
STyla

mahe

-) Seitenurl davorhängen, andere Möglichkeit gibts da nicht
Aber bevor wir mal weiter überlegen:
-) Wenn das nicht auf (d)einem RootServer alleine läuft dann lass es bleiben, das kommt ja schon fast einer Endlosschleife gleich, besser gesagt: Das ist so gut wie Eine.
-) Falls du nur Webspace hast wird dein Hoster von der Idee nicht gerade begeistert sein und deinen Account disablen.
-) Das ganze kann nicht nur den Webserver in die Knie zwingen, auch die Datenmenge die anfällt ist nicht gerade gering.
-) PHP ist für sowas nicht gerade geeignet, zumal dir die execution time einen Strich durch die Rechnung machen wird.

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


styla

hi,
ja ich habe einen rootserver.
was denkst du denn womit ich das realisieren könnte ?
mfg
STyla

dec

die frage bleibt zunächst offen, für WAS du das brauchst, und nicht WIE du es realisieren könntest. evtl gibts ja für deine anforderungen effektivere lösungsvarianten als deine php-webcrawler-idee...

spass ist, was ihr draus macht


styla

also ich möchte eine Suchmaschine realisieren.

dec

warum das rad neu erfinden /uploads/emoticons/icon_e_wink.gif.fcb053ab2c91cb6224c03a16c6332abf.gif\" alt=\";)\" />
http://www.phpdig.net/\" rel=\"external nofollow\">http://www.phpdig.net/

spass ist, was ihr draus macht


styla

der punkt ist das ich meine eigenen ideen habe und diese umsetzen will und mein eigenes system coden will,
Ich will später die Seiten ander indexieren, hab da bestimmte vorstellungen.
Denn in die Datenbank kommen locker ebend mal über 100.000 sachen rein.

styla

Also ich hab jetzt mal was gecodet, jedoch durchsucht er nicht die ganzen weiterführenden links wieso nicht ?
hier der code:
 


function holeurls($url)
{
$fd = fopen ($url, \"r\");
if ($fd != false ){
while (!feof ($fd))
   $buffer .= fgets($fd, 4096);
fclose ($fd);
$muster = \"/]*HREF[^=]*=[ \'\\\"\\n\\r\\t]*([^ \\\"\'>\\r\\n\\t#]+)[ \\\"\'>\\r\\n\\t#>][^>]*>/isU\";
//$muster = \"!!iU\";
preg_match_all($muster,$buffer,$urls);
foreach($urls[1] as $url)
{
schreibeurl($url);
}
//jetzt hole urls aus DB:
$sql = \"SELECT url FROM queueurls\";
$sql = mysql_query($sql);
while($data = mysql_fetch_array($sql))
{
holeurls($data[\'url\']);
}
}
}

 
 
So wie ich es mir vorstelle:
1. jemand ruft die holeurls funktion auf mit der starturl. Es werden alle Links geholt und durch schreibeurls in eine MySQL Datenbank geschrieben. Am ende werden die Urls per Schleife geholt und jede einzelne Url wird erneut abgearbeitet, also urls werden geholt etc.
So sollte er doch automatisch alle Seiten durchgehen bis keine Links mehr zu finden sind ne ?
Aber tut es nicht, er kriegt nur die ersten 2 Seiten. Und im Browser wird komischerweise angezeigt \"Seite kann nicht angezeigt werden\" obwohl er das Script ausführt.
 
Wo liegt denn hier das Problem ? Am Regex(den ich verändert habe, da der obere doch nicht ordnungsgemäß funzte) kann es nicht liegen, da der richtig ist. Also muss es am rest liegen.
mfg
STyla

all your base are belong to us / Discord