Je cherche à faire un genre de mini-crawler et pour cela, voici ma page :
Code : Tout sélectionner
<?php
function in_multi_array($value, $array)
{
foreach ($array as $key => $item)
{
if (!is_array($item))
{
if ($item == $value) return true;
}
else
{
if (in_array($value, $item)) return true;
else if (in_multi_array($value, $item)) return true;
}
}
return false;
}
function racine($site)
{
$site = explode('/', $site);
if( strstr($site[2], 'www.') )
{
$site = explode('www.', $site[2]);
return $site[1];
}
else
{
return $site[2];
}
}
function crawlcurl($url)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$code_brute = curl_exec($ch);
curl_close($ch);
return $code_brute;
}
function crawl($url, &$urls, $limite)
{
$code_brute = crawlcurl($url);
$doc = new DOMDocument();
$doc->loadHTML($code_brute);
$balise_a = $doc->getElementsByTagName('a');
foreach($balise_a as $balise)
{
$href = $balise->getAttribute('href');
if( !in_multi_array($href, $urls) && strstr($href, racine($url)) && !strstr($href, 'pdf') )
{
if( $limite >= 0 )
{
$urls[] = $href;
$urls[] = crawl($href, $urls, ($limite - 1));
}
else
{
$urls[] = $href;
}
}
$limite = ($limite - 1);
}
return $urls;
}
$liste = crawl('http://www.canardduweb.fr', $liste, 1);
print_r($liste);
?>Avec une limite de 2, le script devrait récupérer toutes les URLs de la page active, puis vérifier toutes les URLs de ces urls et une fois de plus... Etc.
Le problème est que je récupère uniquement les liens du premier de la liste uniquement...
Bref mon code bloque quelque part et après plusieurs jours dessus, je ne trouve pas encore comment faire fonctionner ce code...
Merci de votre aide.