aspirateur de liens de site

aspirateur de liens de site - PHP - Programmation

Marsh Posté le 12-06-2006 à 12:59:27    

:hello: Salut tout le monde :)
j'essaye de faire un aspirateur de site en PHP. ( Ceux existants ne proposant pas de modules de base de donnée ).
J'ai donc fait une petite classe pour capturer tous les liens de la page dans le but de les explorer par la suite :)
 
Voici la class en question :

Code :
  1. class OpenUrl {
  2. private $AllHtml ;
  3. private $UrlList ;
  4. private $EpuredHtml ;
  5. private $Url ;
  6. private $Start ;
  7. private $End ;
  8. function __construct($Url)
  9. {
  10.  $this->Url = $Url ;
  11.  $this->AllHtml = file_get_contents($Url) ;
  12.  $this->Start = microtime(true) ;
  13. }
  14. public function GetUseFullText()
  15. {
  16.  $ArrayToFind = array('/<script.*?\/script>/si','/<style.*?\/style>/si') ;
  17.  $ArrayToReplace = array(' ',' ') ;
  18.  $return = preg_replace($ArrayToFind,$ArrayToReplace,$this->AllHtml) ;
  19.  $return = strip_tags($return) ;
  20.  return html_entity_decode($return) ;
  21. }
  22. public function GetDomainName()
  23. {
  24.  $Domain =  preg_replace('[http[s]?:\/\/[\/]*]',"",$this->Url) ;
  25.  $DomainArray = explode("/",$Domain);
  26.  $FQDN = explode(".",$DomainArray[0]) ;
  27.  return $FQDN[sizeof($FQDN)-2].'.'.$FQDN[sizeof($FQDN)-1] ;
  28. }
  29. public function GetAllLinks()
  30. {
  31.  $UrlWherePickUp = preg_replace('[http[s]?:\/\/[\/]*]',"",$_GET['url']) ;
  32.  preg_match_all("#href=['|\"](.*)['|\"]#U",$this->AllHtml,$out, PREG_SET_ORDER) ;
  33.  $UrlList = array() ;
  34.  foreach($out As $Link)
  35.  {
  36.   $val = strpos($Link[1],$UrlWherePickUp);
  37.   //echo "<li>".var_dump($val);
  38.   //echo $Link[1]."</li>";
  39.   if(!ereg("^[http|https|ftp]",$Link[1]) and !ereg("^#",$Link[1]))
  40.   $UrlList['semi'][] = realpath($Link[1]).'|' .var_dump(realpath($Link[1])) ;
  41.   elseif($val === false)
  42.   $UrlList['ext'][] = $Link[1] ;
  43.   else
  44.   $UrlList['int'][] = $Link[1] ;
  45.  }
  46.  // Renvoi final
  47.  return $UrlList ;
  48. }
  49. function __destruct()
  50. {
  51.  $this->End = microtime(true) ;
  52.  echo "<br />-----------------------------------------------------------<br />" ;
  53.  $ElapsedTime = round(($this->End - $this->Start),4) ;
  54.  echo "<h1>Temps ecoulé : ".$ElapsedTime." secondes...</h1>" ;
  55.  echo "<br />-----------------------------------------------------------<br />" ;
  56. }
  57. }


Le probleme que je rencontre se situe par exemple avec le site http://www.overgame.com/
Ce site effectue en fait une redirection vers http://www.overgame.com/page/
 
or les liens capturés dans les propriétés href des balises <a> sont souvent des chemins relatifs... ( du genre <a href="./rubrique/page.php">lien</a> ).
et pour les explorer par la suite je reconstitue le chemin absolu en collant le chemin relatif avec l'url de la page que je suis en train d'explorer...
 
j'obtiens donc http://www.overgame.com/page8212.htm au lien de http://www.overgame.com/page/page8212.htm
et je planche un peu la dessus...
 
Donc si vous avez des idées je suis preneur !

Reply

Marsh Posté le 12-06-2006 à 12:59:27   

Reply

Marsh Posté le 12-06-2006 à 19:38:47    

up !

Reply

Marsh Posté le 13-06-2006 à 09:46:42    

up !

Reply

Marsh Posté le 13-06-2006 à 10:35:48    

Regarde conmment les autres aspirateurs sont fait (si Free software ils sont)
 
exemple : http://www.httrack.com/page/2/fr/index.html?pat (ecrit en C)
 
Sinon etant donne que tu recupere le domaine, si tu vois que le liens n'est pas absolu, tu prend le relatif et tu rajoute le domaine devant et pouf, ca devient un chemin absolu. Enfin je crois


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-06-2006 à 12:10:57    

en fait je cherche une version web ou un module executable depuis Cron

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed