• User

    Spider ideale

    Solo i miei 2 Iuro-cent.

    Davo una occhiatina al codice dello spider, aggiornato per altro ad agosto quindi immagino sia stato già modificato... tuttavia...

    Ho notato (riassumendo in termini spiccioli) che lo spider fa pressappoco questo:
    Dato un url:

    • Apre la pagina
    • Ne verifica la presenza nel DB
    • Salva/Aggiorna i contenuti nel DB
    • Calcola il peso di ogni singola keyword di quel documento rispetto al DB ...

    Ora il calcolo dell'algo di prova e del TF*IDF è un qualcosa che credo si dovrebbe delegare ad un ulteriore script.
    Ritengo che lo spider debba sostanzialmente limitarsi a fare questo:
    Dato un url:

    • Apre la pagina
    • Ne verifica la presenza nel DB
    • Salva/Aggiorna i contenuti nel DB
    • Salva/Aggiorna i link della pagina in una tabella dedicata (Es.: denominata spider)
    • Segue l'url successivo della tabella 'spider' (e ricomincia daccapo)

    Occorrerebbe poi uno script dedicato che periodicamente calcoli il peso delle key su tutto il DB e quindi consenta alle pagine (già indicizzate) di apparire nelle serp.

    Vi confesso che ho dato solo una occhiata superficiale al codice (e non sono proprio una cima in php) ma poniamo il caso di 3 competitors:
    il 1° ha una pagina che contiene la key parapacchio ovviamente questa parola non è contenuta nel DB, nel documento in esame la key ha un peso di 10/20*X/1 (DF è già ==1 perchè nel codice abbiamo if ($df ==0) $df = 1;) ... quindi lo spider arriva si fà i suoi conticini e assegna alla mia pagina per il termine "parapacchio" il valore di 2X

    il 2° competitor ha un documento idealmente identico al 1°
    parapacchio ha un peso identico al 1° competitor quindi 2X

    il 3° competitor ha un documento idealmente identico ai primi 2
    parapacchio ha un peso pari a 1X=(10/20 * X/2)

    e questo solo perchè ha avuto la sfortuna di essere stato indicizzato dopo... invece con uno script dedicato si puo far si che periodicalmente si passino in rassegna tutte le key ed ogni pagina assume un valore giusto rispetto al resto.

    Se ho detto cavolate, chiedo venia.


  • User

    @luvme2tms said:

    Ritengo che lo spider debba sostanzialmente limitarsi a fare questo:
    Dato un url:

    • Apre la pagina
    • Ne verifica la presenza nel DB
    • Salva/Aggiorna i contenuti nel DB
    • Salva/Aggiorna i link della pagina in una tabella dedicata (Es.: denominata spider)
    • Segue l'url successivo della tabella 'spider' (e ricomincia daccapo)

    Nell'ultima release lo fa già.. :yuppi:


  • User

    In parte sono daccordo con la teoria su descritta di avere lo script e l'indicizzazione divisi ma non come hai spiegato nel senso che dovrebbe funzionare in questo modo:

    [Script]

    . Apre la pagina
    . Salva il contenuto nel db
    . Recupera altri link che mette nella tabella spider
    . Indicizza la pagina per i termini che contiene e solo relativi alla pagina
    . Chiude la pagina e passa alla prossima della tabella spider

    [/Script]

    [Elaborazione]

    . Per ogni parola contenuta nel db si esegue l'aggiornamento della serp per tutte le pagine che comprendono quel termine

    [/Elaborazione]

    Logicamente l'elaborazione è spiegata in modo molto semplicistico (e ancora io ci sto studiando su) ma è proprio per rispondere all'esigenza dell'OP che ha proposto (secondo me) un interessante problema.

    In questo modo quando lo spieder trova le 3 pagine uguali assegna sempre lo stesso peso alla pagina quindi pari merito nelle ricerche. Al momento dell'elaborazione vengono assegnati i giusti indici tenendo conto di tutti i fattori e di tutte le pagine che sono presenti nel DB

    Buona giornata 😉


  • User

    @Andriy
    Ne sono lieto. Dal momento che mi frullano in testa tante idee sarebbe possibile avere il source dello spider (ed eventuali function.php ect.) in modo da poter partecipare seppur a livello teorico allo sviluppo del progetto?

    Per intenderci, il php lo so leggere, ma non mi azzardo a scriverlo 😛

    Tanto per farti un esempio stavo pensando a come gestire i metatag description, keywords ed expires... pensavo a come filtrare pagine costruite in modo da "fregare gli spider", come creare un hash della pagina per verificare eventuali "cloni" ... vabbè una serie di cosette così.

    <OT> C'è modo di conoscere "da utente" (quindi NON webmaster) il PR esatto (precisione di ~1/1000) assegnato da google e/o da yahoo ad una pagina? </OT>

    Edit:
    Avevo chiesto dove reperire il sorgente ma poi mi sono reso conto che da bravo n00b non avevo letto tutti i post sticked del forum 😛 :3:


  • User

    Ciao a tutti,
    sono arrivato su questa pagina abbastanza per caso: mi sto preoccupando di realizzare uno spider estremamente semplice, in verità non è un vero spider nel senso comune del termine ma uno script che visita le pagine semplicemente per capire se sono state modificate nelle precedenti 24 ore.

    Dopo aver aperto un thread su html.it, che in verità non ha riscosso grande successo, un utente mi ha consigliato di passare da queste parti... allora ho scaricato il codice del vostro spider (che noto avere più verioni) e me lo sono guardato..

    La parte che mi interessa è questa:
    [Script]
    . Apre la pagina
    . Salva il contenuto nel db
    . Recupera altri link che mette nella tabella spider
    . Indicizza la pagina per i termini che contiene e solo relativi alla pagina
    . Chiude la pagina e passa alla prossima della tabella spider
    [/Script]

    In particolare mi interessa capire come lo spider venga attivato da crontab e analizzi tutti gli url presenti in una determinata tabella del DB.

    Analizzando il problema mi sono accorto che esistono varie possibilità, tutte però hanno seri problemi, riassumendo:

    • analizzo una pagina e con header() invoco lo spider su una pagina successiva -> se durante l'ananlisi di una pagina lo script si blocca, nn vengono analizzati tutti gli url successivi
    • in spider.php metto un ciclo sugli url da analizzare -> lo script va in timeout e/o il server muore
    • in crontab un'invocazione diversa di spider.php per ogni url -> devo continuamente modificare crontab
    • lancio da spider.php un thread per ogni url da analizzare -> ESISTONO I THREAD IN PHP (stile java e simili)? Sono giorni che tento di capirlo ma nessuno sa darmi una risposta.. :*(

    Voi quale soluzione pensate sia migliore?


  • User

    @CreativeFactory said:

    • in crontab un'invocazione diversa di spider.php per ogni url -> devo continuamente modificare crontab

    Non sono dacordo, non devi modificare sempre la crontab.
    Non mi dire che vorresti creare una una pagina per ogni link da aggiornare?? E' una cosa impossibile....
    Per far funzionare correttamente una cosa (tipo spider) che deve andare a cicli basta che nel db aggiungi tipo un campo "lastMod" di tipo DateTime. Dopo, quando il crontab lancia il tuo script: all'inizio per avere il record successivo recuperi il record con la data più vecchia nel campo lastMod, e alla fine del script aggiorni la data di lastMod di quel record, in questo modo fai il giro di tutti i record con un solo script che verrà lanciato da crontab ogni tot secondi/minuti..

    @CreativeFactory said:

    • lancio da spider.php un thread per ogni url da analizzare -> ESISTONO I THREAD IN PHP (stile java e simili)? Sono giorni che tento di capirlo ma nessuno sa darmi una risposta..

    In PHP non esistono i thread.. LOL


  • User

    Ok, infatti pure io nn metterei mai in crontab una entry per ogni url da analizzare.

    Ma preso spider.php tu come lo implementeresti?
    1.
    while ( url_da_analizzare ){
    analizzo_pagina();
    }

    recupero_url_da_DB();
    analizzo_pagina();
    header( spider.php?url_successivo );

    La criticità dei due metodi sta però nel fatto che se un anello della catena si spezza io non percorro tutta la catena. Però per voi non è un gran problema dato che invocate continuamente lo spider.

    Io invece dovrei fare uno script che viene lanciato una volta a notte.

    Ciao!