Salve a tutti. Sto facendo un semplice crawler in php e ho un piccolo problema. I link che trovo vengono inseriti in coda ad un vettore mentre il link appena visitato viene rimosso dallo stesso. Ho però un errore di cui non capisco il motivo: quando faccio $queue = array_shift($coda), la $coda viene vista come stringa e non come vettore, quindi tutte le iterazioni successive, ovviamente, non funzionano. Ecco il codice
codice:<?php // prendo una pagina seme e ne trovo i link. A questo punto prendo tali link e li uso come pagine seme. function LeggiUrls($url,$coda) { $file = 'link.txt'; $html = file_get_contents($url); file_put_contents($file,"".PHP_EOL."pagina analizzata: ".$url.PHP_EOL.PHP_EOL, FILE_APPEND); //guardo se riesce a visitarla, praticamente guardo se la pagina esiste davvero osservando se testo è vuoto if(!$html) { echo"Connessione fallita!"; } else{ //tengo solo i tag a $testopulito = strip_tags($html, "<a>"); //questa è un'espressione regolare che mi salva i link nella variabile matches preg_match_all( '/<a.+?href="(http:\/\/www.[^0-9].+?)"/', $testopulito, $matches); // Ciclo tutti i risultati li aggiungo in fondo alla coda e li stampo sul file foreach($matches[1] as $link){ array_push($coda,$link); file_put_contents($file, $link.PHP_EOL, FILE_APPEND); } } //rimuovo il primo elemento della coda, ossia l'url che è stata appena analizzata $queue = array_shift($coda); Iteratore($queue);} function Iteratore($coda){ // Ciclo e recupero tutte le pagine nella coda fino a quando ci sono elementi while(count($coda)>0) { LeggiUrls($coda[0],$coda); } } file_put_contents("link.txt", ''); //svuoto il file // Inizializzo la coda che contiene gli url. $coda = array("http://espresso.repubblica.it/"); $seme= $coda[0]; LeggiUrls($seme,$coda); ?>

Rispondi quotando
