robots.txt beachten
Stephan
- php
Hallo,
ich baue gerade einen Crawler. Aber ich habe keinen Plan, wie das Funktionieren soll:
Also ich möchte die robots.txt beachten. Ich habe eine Funktion in meinen Code eingebaut, was ist, wenn sie existiert.
Jetzt dachte ich mir, wenn ich mit preg_match das zwischen User-Agent: * und \\n\\n (also des Absatzes) auslese, wie hole ich da jetzt die einzelnen Disallow: oder Deny:?
Also wenn eine robots.txt so aussieht:
User-Agent: *
Deny: /path/
Disallow: /path2/path3/
User-Agent: bla
[...]
Dann möchte ich ja nur im Ersten Schritt das haben:
User-Agent: *
Deny: /path/
Disallow: /path2/path3/
und im zweiten Schritt das:
Deny: /path/
Und dann suche ich so nach weiteren URLs, die er verfolgen soll:
preg_match_all('/href=("|')(.*?)\1/si', $urlContent, $urls);
Wie schließe ich jetzt diese Paths aus der robots.txt aus?
Also ich muss dazu sagen, ich mache mir diesen Crawler aus so vielen Teilen und Hilfen und bastele so lange dran rum, bis er geht, dass ich noch nicht viel Ahnung von PHP habe, auch wenn ich jetzt schon einen Crawler baue. Also ich habe es vor 2 Monaten angefangen...
Also seit bitte nicht so Streng und erklärt etwas ausführlicher :-)
Vielen Dank!
Stephan
Hilft Dir folgender Link weiter?
Hi,
der ist super: ich stelle jetzt einfach eine Hypothese (?) auf, was die einzelnen Funktionen meiner Meinung nach bewirken könnten :-)
Ich brauche ja nur einen Teil:
----------------
$my_user_agent="User-agent: *"; //my useragent
$robots=explode("\n",$robots); // hier wird ? ich denke jede zeile einzeln gelsesen?
for ($i=0;$i<sizeof($robots);$i++){ // wenn es mehr als 0 zeilen gibt
if (trim($robots[$i])==$my_user_agent){ // rules for agent: *
for ($checkrules=1;$checkrules<10;$checkrules++){ // (?)
if (trim($robots[$i+$checkrules])!=""){ // (?)
$pos = strpos( $current_line[$count],"User-agent");
if (is_integer($pos)) break;
$pos = strpos( $current_line[$count],"#");
if (is_integer($pos)) $current_line[$count]=substr($current_line[$count],0,$pos);
$disallow_line=str_replace("Disallow: ", "" ,$robots[$i+$checkrules]);
//$disallow_line=str_replace("http://", "" ,$disallow_line);
$disallow_line=str_replace("/", "" ,$disallow_line);
$newdata[$num]=$stipped_robotsdomain.$disallow_line;
$num++;
$count++;
}
}
}
}
$forbidden=1;
for ($last=0;$last<20;$last++){
if (trim($newdata[$last])!=""){
if (preg_match("/".trim($newdata[$last])."/i",$stripped_current_url)) {$forbidden=0;}
}
}
return $forbidden;
}
Function Read_Content($url){// Open een url return content
$handle=@fopen($url,"r");
if($handle){
$contents = fread ($handle, 10000);
fclose($handle);
}
return $contents;
}
----
Also ich hab nicht viel verstanden :-) :-?
Also wenn jemand Zeit und Lust hat, kann er ihn mir ja erklären, ich will den Code jetzt auch nicht einfach einbauen, sonst habe ich da Code, den ich gar nicht kapiere :-?
Danke schon mal
Stephan
ICQ: 204789996
Hallo,
ich baue gerade einen Crawler. Aber ich habe keinen Plan, wie das Funktionieren soll:
[...]
in Perl gibt es das Paket LWP, in PHP sicher ähnliches, daß Deine Wünsche erfüllt.
Gruß
Reiner
Hallo,
ich wollte mir aber gerne etwas eigenes bauen, das ich auch beim Aufbau verstehe und nichts fertiges nehmen. Wenn ich etwas fertiges nehme, muss ich den Code analysieren und das dauert genauso lange. Ausserdem will ich mein eigenes :-)
Danke aber trotzdem
Stephan