Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 53
  1. #1

    Realizzare uno spider semplificato - consigli sulla struttura

    Ciao a tutti,
    devo realizzare una sorta di spider molto semplice e mi piacerebbe ricevere dei consigli da voi.

    Il tutto deve funzionare così:
    - in un database vengono inseriti gli url da visitare
    - ogni notte lo spider si attiva e visita le pagine per ricavarne alcune informazioni

    Per la gestione del database e l'attivazione automatica dello spider nessun problema (MySQL e crontab).

    Mi chiedo come dovrà invece funzionare lo script php:
    - se mettiamo gli url da analizzare sono 1000 non posso farlo in un ciclo: infatti se il timeout per ricevere le informazioni dalla socket è di 20sec, moltiplicato per il numero delle pagine il mio script in php eccederà sicuramente il timeout di esecuzione di uno script php;
    - potei forse mettere nel crontab un'invocazione diversa dello spider per ogni url presente nel database? Non mi sembra elegante e presuppone che io debba modificare da php il crontab ad ogni inserimento di un nuovo url nel database..
    - potrei fare una pagina spider.php che legge un url presente nel database, lo analizza e poi si autoinvoca con un header() andando a lavorare sull'url successivo? Anche qua però non mi pare il massimo..
    - esiste la possibilità di creare una pagina spider.php che legge tutti gli url nel database e per ognuno lancia un thread? In questo modo il tutto sarebbe asincrono.. ma si può fare in php? Ho provato a cercare su html.it e su google.. ma non ne ho cavato un ragno dal buco..
    E se mettiamo ci siano 1000 url nel database, il lancio di 1000 thread può uccidermi il server?

    Bho, come avrete capito non so quale sia la via più intelligente, se qualcuno può aiutarmi gli sarei immensamente grato..

    Ciao a tutti e buon anno!

  2. #2

    .............

    Ciao.
    La prima cosa che mi viene in mente usa
    Ajax con setTimeout passando come parametro
    l'url che avrai messo in un array (cioè
    ad ogni chiamata metti un index++) e nella
    pagina richiamata fai quello che devi fare.

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Ma se la pagina chiamante è invocata con cronetab immagino che non possa essere eseguito javascript. Oppure sbaglio?


  4. #4
    Originariamente inviato da superpelo
    Ma se la pagina chiamante è invocata con cronetab immagino che non possa essere eseguito javascript. Oppure sbaglio?


    bella domanda !

    Penso proprio di no ma comunque nel dubbio fai un tentativo .....







    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Javascript per funzionare ha bisogno di essere interpretato da un browser con il supporto a js attivo. Che non è il mio caso.

    Forse una soluzione possibile è quella di avere una pagina spider.php che esegue queste operazioni:
    - scansione di una pagina
    - recupero pagina successiva
    - header( spider.php?pagina_da_scansire )

    Però nasce un problema, se a un certo punto l'esecuzione della pagina si interrompe non mi verranno scansionati gli url successivi. E questo non me lo posso permettere.

    Informazione di servizio: esiste in php la possibilità di fare programmazione asincrona/concorrente come in java (ad esempio)?

  6. #6
    Su giorgiotave stanno lavorando proprio ad una cosa del genere dagli un'occhiata

  7. #7
    Sono andato a vedere le pagine del progetto che mi hai consigliato, ho scaricato i sorgenti e me li sono guardati per bene.. ho visto che esistono varie proposte di implementazione di spider e quella in fase più avanzata funziona con il redirect: finito di analizzare una pagina lo spider viene reinvocato sulla pagina successiva..

    Però devo dire che il progetto non pare molto maturo, almeno in questa fase.. e con questo tipo di funzionamento rmane il problema di cui prima: se l'esecuzione di una invocazione della mia ipotetica pagina spider.php si blocca il sistema nn può proseguire nell'analisi degli altri url.. non è pericoloso?


  8. #8
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Anch'io sono molto interessato a questo argomento e soprattutto vorrei sapere a che link hai trovato i sorgenti.

    Cmq per rispondere al tuo dubbio a mio parere non è cosi pericoloso. Io risolverei la tua preccupazione facendo, ovviamente, un sistema di tagging degli url che, in caso di blocco, faccia ripartire lo spider dall'ultimo url taggato come "controllato".
    In ogni caso....perchè dovrebbe piantarsi? intendi per sovraccarico del server?

  9. #9
    Per avere i sorgenti di cui sopra vai sul forum di giorgiotave, nel sottoforum dedicato a teecno. C'è un post che ti dice come installare un programma di gestione degli SVN.. è semplice e puoi scaricare le ultime versioni del progetto.

    ---

    Detto ciò torniamo a noi: il sistema potrebbe impallarsi a causa del server, potrebbe andare in timeout l'esecuzione dello script, andare in timeout per colpa delle socket.. bho.. per varie ragioni IMMAGINO.

    Questo vuol dire che la scansione si blocca ad un anello della catena. Se io poi dicessi a crontab di ripetere l'esecuzione dopo un'ora dalla precedente, partendo dal primo non flaggato come fatto, potrebbe succedere che il tutto si blocchi nuovamente... e allora dovrei riprogrammare una nuova scansione in crontab.. che si potrebbe bloccare ancora.. sostanzialmente in un ciclo quasi infinito..

    Diciamo che questa implementazione mi pare troppo legata al fato, cioè c'è la possibilità che si verifichi il caso peggiore possibile: la catena non viene percorsa interamente...

    Che ne dici?

  10. #10
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    No beh...se tu "tagghi" gli "anelli" della catena, all'esecuzione sucessiva lo spider riparte dell'anello sucessivo salvando in log quel'è l'anello che ha dato il problema e magari (tramite una gestione degli errori) il perchè del crash.

    A quel punto all'avvio sucessivo l'anello viene saltato si, ma solo per il ciclo in corso. Al sucessivo lo spider ci riprova. Etc...ovviamente se il problema si presenta sempre sullo stesso anello, diventa un po un casino...

    Boh...cosi è come lo implementerei io...ma magari è na scemenza eh :P

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.