Прост спайдър бот
27-03-2015
В името на урока ще постна кода накуп, като няма да спазя правилото за отделяне на класовете от изпълнителният код (инстанциите).

<meta http-equiv='Content-Type' content='text/html; charset= utf-8' />
<?php
ini_set('max_execution_time', 300);
class SB{

public function __construct(){

}

public function scan($siteURL){
if($links = $this->getURLs($siteURL)){
foreach($links as $k => $v){
echo "<br><font color='green'>$k - ".$v.'</font><pre>';
if($taken = $this->getURLs($v)){
foreach($taken as $key => $url){
echo "<br><font color='red'>$key - ".$url.'</font><pre>';
print_r($this->getURLs($url));
}
}
echo "</pre>";
}
}
}

private function getURLs($siteURL){
preg_match_all('/href=\"((https?:\/\/|www\.).*?)\"/',file_get_contents($siteURL),$matches);
if($matches[1]){
return $matches[1];
}
return false;
}
}
$time_start = microtime(true);
$SB = new SB();
$SB->scan('http://web-tourist.net/forum/');
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "<br><center>Време ".$time."</center>";

?>

Драснал съм два прости метода. Методът scan() получава връзката, която трябва да обходи. Вътрешно той извиква метода getURLs() връщайки масив със съвпадащи спрямо шаблона стойности. Като цяло просто копирате, поставяте в php файл и стартирате. Кодът е много прост и честно казано няма кой знае какво за обяснение. Сканирането е направено да е на дълбочина 3 автоматични проследявания на заредениете линкове и линковете в тях.


/ Трябва да сте регистриран за да напишете коментар /
От: tu6o
18:31 23-09-2015
Регулярният ти израз ще прихване и външни CSS файлове, който не са връзки. За да ги елиминираш, го промени на:

\]+?href=\"((https?:\/\/|www\.).*?)\"
От: tu6o
18:32 23-09-2015
[code]\]+?href=\"((https?:\/\/|www\.).*?)\"[/code]
От: dakata__92
10:05 24-09-2015
Да самият, регулярен израз може много да се промени но просто принципа е този. Не съм доизпипал нищо драснах го набързо, поради липсата на урок от този вид. :)
От: tu6o
12:12 24-09-2015
Как да вмъкна код в коментара, понеже изразът ми не излиза правилно?
1