Il Forum di Orebla.it

Benvenuto nella community di Orebla.it
Oggi è dom 16 feb, 2020 9:23 pm

Tutti gli orari sono UTC + 1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 13 messaggi ] 
Autore Messaggio
 Oggetto del messaggio: [PHP] Spider per motori di ricerca
Messaggio da leggereInviato: lun 13 ago, 2007 9:03 am 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Eccovi il progetto di un mio spider in grado di riconoscere tutti i link in una pagina web (per ora mostra semplicemente il numero di link trovati su una pagina web, non ha ancora la funzionalità di indicizzazione in un database) fino a un livello di profondità 2 (ma si può tranquillamente aumentare il livello di profondità effettuando più chiamate ricorsive). Lo spider trova tutti i link in una pagina web, li riporta in output e a sua volta segue ognuno dei link trovati alla ricerca di altri link.

Codice:
<?
function get_links($content,$url)  {
        $found=array();
        $l=0;

        for ($i=0; $i<count($content); $i++)  {
                $line=split(" ",$content[$i]);

                for ($j=0; $j<count($line); $j++)  {
                        if (strstr($line[$j],"<a") && strstr($line[$j+1],"href="))  {
                                $link=split('"',$line[$j+1]);

                                if (!strstr($link[1],"http://"))  {
                                        $fields=split("/",$url);
                                        $root="http:/";

                                        for ($k=2; $k<count($fields)-1; $k++)
                                                $root=$root."/".$fields[$k];

                                        $link[1]=$root."/".$link[1];
                                }

                                $found[$l++]=$link[1];
                        }
                }
        }

        return $found;
}

$url=$_POST["url"];
$fp=fopen($url,"r");

if ($fp==null)
        die ("Error reading from $url\n");
fclose($fp);

$found_1=get_links(file($url),$url);

print "<h2>Links found inside $url:</h2>\n";
print "<ul>\n";

for ($i=0; $i<count($found_1); $i++)
        print "<li><a href=\"$found_1[$i]\">$found_1[$i]</a></li>\n";
print "</ul>";

for ($i=0; $i<count($found_1); $i++)  {
        $url=$found_1[$i];
        $found_2=get_links(file($url),$url);

        print "<h2>Links found inside $url:</h2>\n";
        print "<ul>\n";

        for ($j=0; $j<count($found_2); $j++)
                     print "<li><a href=\"$found_2[$j]\">$found_2[$j]</a></li>\n";
        print "</ul>";
}
?>

_________________
Immagine
Immagine


Top
 Profilo  
 
Messaggio da leggereInviato: lun 13 ago, 2007 6:09 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Veramente un ottimo script. Semplice ma veloce!
Se sei d'accordo posso inserirlo tra gli script di html.it nella sezione PHP!
Dimmi se sei d'accordo! Così faccio la recensione!

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: mar 14 ago, 2007 12:05 am 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Certo inseriscilo pure :wink:

_________________
Immagine
Immagine


Top
 Profilo  
 
Messaggio da leggereInviato: mar 14 ago, 2007 6:08 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Ok faccio la recensione poi nei prossimi mesi verrà inserito!!
Poi ti dico non appena lo inseriscono!

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: mar 14 ago, 2007 8:00 pm 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Eccone una versione migliorata, in grado di effettuare scansioni fino a un livello di profondità arbitrario (e non fino al livello 2 come la versione precedente).

get_links.php:

Codice:
<?
//   get_links.php
// Questa funzione è in grado di processare un testo e trovare al suo interno
// collegamenti ipertestuali, filtrando i tag HTML
//
// Software rilasciato sotto licenza GPL
// BlackLight, (C) 2007
// http://blacklight.gotdns.org

function get_links($content,$url)  {
        $found=array();
        $l=0;

        for ($i=0; $i<count($content); $i++)  {
                $line=split(" ",$content[$i]);

                for ($j=0; $j<count($line); $j++)  {
                        if (strstr($line[$j],"<a") && strstr($line[$j+1],"href="))  {
                                $link=split('"',$line[$j+1]);

                                if (!strstr($link[1],"http://"))  {
                                        $fields=split("/",$url);
                                        $root="http:/";

                                        for ($k=2; $k<count($fields)-1; $k++)
                                                $root=$root."/".$fields[$k];

                                        $link[1]=$root."/".$link[1];
                                }

                                $found[$l++]=$link[1];
                        }
                }
        }

        return $found;
}
?>


find_link.php:

Codice:
<?
//   find_link.php
// Quest'applicazione web trova i link all'interno di una pagina web
// fino a un livello di profondità arbitrario e li indicizza all'interno di un database
//
// Software rilasciato sotto licenza GPL
// BlackLight, (C) 2007
// http://blacklight.gotdns.org
include ('get_links.php');

$db_host='localhost';
$db_name='links';
$db_user='USER';
$db_pass='PASS';

if (($db=mysql_connect ($db_host,$db_user,$db_pass))==null)
        die ("<b>Unable to connect to database server $db_host</b>\n");

mysql_select_db ($db_name,$db) or die ("Unable to connect to database $db_name\n");

$STEPS=8;
$url=$_POST["url"];

for ($k=0; $k<$STEPS; $k++)  {
        print "<h1 align=center>Livello ".($k+1)."</h1>\n";

        if ($k>0)  {
                for ($i=0; $i<count($found[$k-1]); $i++)  {
                        $url=$found[$k-1][$i];
                        $fp=fopen($url,"r");

                        if ($fp==null)  {
                                print "<b>Error reading from $url</b>\n";
                                fclose($fp);
                        } else {
                                fclose($fp);
                                $found[$k]=get_links(file($url),$url);

                                print "<h2>Links found inside $url:</h2>\n";
                                print "<ul>\n";

                                for ($j=0; $j<count($found[$k]); $j++)  {
                                        $query =
                                                "insert into links(parent,link,num_links) ".
                                                "values('".$found[$k-1][$i]."','".$found[$k][$j]."',1)";
                                        mysql_query ($query) or print "Invalid query: $query\n";
                                        print '<li><a href="'.$found[$k][$j].'">'.$found[$k][$j]."</a></li>\n";
                                }

                                print "</ul>\n";
                        }
                }
        } else {
                $fp=fopen($url,"r");

                if ($fp==null)
                        die ("Error reading from $url\n");
                fclose($fp);

                $found[$k]=get_links(file($url),$url);

                print "<h2>Links found inside $url:</h2>\n";
                print "<ul>\n";

                for ($i=0; $i<count($found[$k]); $i++)  {
                        $query =
                                "insert into links(parent,link,num_links) ".
                                "values('$url','".$found[$k][$i]."',1)";
                        mysql_query ($query) or print "Invalid query: $query\n";
                        print '<li><a href="'.$found[$k][$i].'">'.$found[$k][$i]."</a></li>\n";
                }

                print "</ul>";
        }
}
?>


Per testarlo: http://blacklight.gotdns.org/search_eng ... _link.html

_________________
Immagine
Immagine


Ultima modifica di BlackLight il gio 16 ago, 2007 8:07 pm, modificato 2 volte in totale.
Black ho modificato il mess perchè mi sembrava che avevi lasciato la pass e nome utente... ;-)


Top
 Profilo  
 
Messaggio da leggereInviato: gio 16 ago, 2007 6:25 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Ok ho fatto la recensione, Black se hai voglia mi fai un'intestazione semplice da mettere all'inizio degli script con scritto il tuo sito e quello che vuoi tu! Per fare una cosa completa. Poi per per la tabella del database del file find_link.php hai il codice SQL per la creazione??
Grazie!

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: gio 16 ago, 2007 8:04 pm 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Certo, ecco il codice SQL:

Codice:
drop table if exists links;
create table links(
     link      char(255)      not null,
     parent    char(255),
     num_links integer,
     primary   key(link,parent)
);


p.s. Ovviamente la gestione dell'indicizzazione dei link in un database è lungi dall'essere completa...appena la recensione viene pubblicata riesci a passarmi il link?

_________________
Immagine
Immagine


Top
 Profilo  
 
Messaggio da leggereInviato: sab 18 ago, 2007 8:21 am 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Certo appena verrà inserito ti do il link, però mi sa che se ne parlerà a settembre ottobre! :D

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: ven 14 set, 2007 6:35 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Ecco Black!
http://php.html.it/script/vedi/4258/php-spider/

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: sab 15 set, 2007 12:03 pm 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Ottimo 8)
Fammi poi sapere se ha successo!

_________________
Immagine
Immagine


Top
 Profilo  
 
Messaggio da leggereInviato: sab 15 set, 2007 1:12 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Certo! :D

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Messaggio da leggereInviato: dom 16 set, 2007 3:56 pm 
Non connesso
Newbie
Newbie

Iscritto il: mar 28 ago, 2007 11:28 am
Messaggi: 22
Che bello! lo provo senz'altro appena posso. Ora sto provando un altro spider, si chiama teecno è quello realizzato da Giorgio Taverniti & co.


Top
 Profilo  
 
Messaggio da leggereInviato: gio 20 set, 2007 1:33 pm 
Non connesso
Amministratore
Amministratore
Avatar utente

Iscritto il: lun 27 dic, 2004 10:32 am
Messaggi: 2614
Località: Ferrara
Ok poi dicci con quale ti trovi meglio!!

_________________
I'm so happy because today
I've found my friends ...
They're in my head

[NIRVANA - LITHIUM]
Il Blog del disperato: http://blog.orebla.it


Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 13 messaggi ] 

Tutti gli orari sono UTC + 1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduzione Italiana phpBBItalia.net basata su phpBB.it 2010
phpBB SEO