bonjour tt le monde !! je suis entrain de rediger un script php qui me permettrait de faire les choses suivants :
1)crawler d'un site internet
2)extraire tous les liens externes et invalides(404 not found)
3)mettre le resultat dans la bdd
voilà c que j'écrit
exter.php
2.php
la 3eme tache pas resolu
, mais le resultat de l'execution n'est pas suffisante ,il ne fait pa ce que je veux :/
1)crawler d'un site internet
2)extraire tous les liens externes et invalides(404 not found)
3)mettre le resultat dans la bdd
voilà c que j'écrit
exter.php
Code:
<?php
// It may take a whils to spider a website ...
set_time_limit(10000);
// Inculde the phpcrawl-mainclass
include_once('../PHPCrawl_083/PHPCrawl_083/libs/PHPCrawler.class.php');
//include ('2.php');
// Extend the class and override the handleDocumentInfo()-method
class MyCrawler extends PHPCrawler
{
function handleDocumentInfo(PHPCrawlerDocumentInfo $DocInfo) {
if (PHP_SAPI == "cli") $lb = "\n";
else {
$lb = "<br />";
$home_url = parse_url($DocInfo->url ,PHP_URL_HOST );
$file = @file_get_contents($DocInfo->url);
preg_match_all('/<a.*?href\s*=\s*["\']([^"\']+)[^>]*>.*?<\/a>/si', $file, $urls);
# Affichage
echo '<br/>';
foreach($urls as $url){
for($i=0;$i<sizeof($url);$i++){
$link_url = parse_url( $url[$i],PHP_URL_HOST );
//and !is_valid_url($url[$i])
if (($link_url != $home_url)and is_valid_url($url[$i])) {
echo '1'.$lb ;
echo " Page requested: ".$DocInfo->url." (".$DocInfo->http_status_code.")".$lb;
echo '<br/>';
echo "<font color=green >"."lien externe : ".$url[$i].$lb."</font>";
echo '<br/>';
flush();
}
//if (!in_array($url,$tab)){
//array_push($tab,$url);
// }
}
}
}
}
}
$crawler = new MyCrawler();
$crawler->setURL("http://tunisie-web.org");
$crawler->addURLFilterRule("#\.(jpg|gif|png|pdf|jpeg|css|js)$#i");
$crawler->setWorkingDirectory("C:/Users/mayss/Documents/travailcrawl/");
$crawler->go();
?>
Code:
<?php
function is_valid_url($url){
$array = @get_headers($url);//@ pour ne pas afficher l'erreur
$string = $array[0];
if(strpos($string,"404 Not found")) {
return true;
} else {
return false;
}
}
?>
