2008-08-28 11 views
11

Ho appena iniziato a pensare di creare/personalizzare un crawler web oggi e so molto poco sull'etichetta del web crawler/robot. La maggior parte degli scritti sull'etichetta che ho trovato sembrano vecchi e scomodi, quindi mi piacerebbe avere alcuni spunti attuali (e pratici) dalla comunità degli sviluppatori web.Quali sono le considerazioni chiave durante la creazione di un crawler web?

voglio usare un cingolato per camminare sopra "web" per un super semplice scopo - "fa la marcatura del sito XYZ si incontrano condizione ABC?".

Questo solleva un sacco di domande per me, ma penso che le due questioni principali che ho bisogno di uscire di mezzo prima sono:

  • ci si sente un po ' "incerto" da ottenere andare - questo tipo di cose è accettabile?
  • Quali considerazioni specifiche deve fare il crawler per non disturbare le persone?

risposta

9

Obey robots.txt (e non troppo aggressivo come è stato già detto).

Si potrebbe desiderare di pensare la stringa user-agent - sono un buon posto per essere up-front su quello che stai facendo e come si può essere contattati.

+1

Inserire le informazioni di contatto nell'agente utente è un ottimo modo per presentare il proprio ragno ai responsabili del sito e rendere evidente che si è amichevoli e di sopra, inserendo le proprie informazioni di contatto. Se hanno un problema con il tuo sito, potresti avere la possibilità di lavorare con loro per ottenere un feed o un'API se possono contattarti. Offusca tale informazione o non ce la fornisce e raggiungerà immediatamente l'ascia e interromperà l'accesso vietando il tuo dominio. –

2

Direi che è molto importante considerare quanto carico si sta causando. Ad esempio, se il crawler richiede ogni oggetto di un singolo sito, più o meno contemporaneamente, potrebbe causare problemi di caricamento per quel particolare sito.

In altre parole, assicurarsi che il crawler non è troppo aggressivo.

2

E 'perfettamente accetable fare - basta assicurarsi che visita solo ogni pagina una volta per ogni sessione. Poiché tecnicamente stai creando un searchbot devi rispettare le regole robots.txt e no-cache. Le persone possono ancora bloccare il tuo bot in modo specifico, se necessario, bloccando gli IP.

Si sta cercando codice sorgente per quanto posso dire, quindi vorrai creare qualcosa da seguire per <link> s per fogli di stile e <script src="..."></script> per JavaScripts.

2

carico è una grande considerazione. Metti limiti alla frequenza con cui esegui la scansione di un determinato sito e quali sono le informazioni di base necessarie per raggiungere il tuo obiettivo. Se stai cercando testo non scaricare tutte le immagini, cose del genere.

Naturalmente obbedire a robots.txt ma accertarsi anche che la stringa dell'agente utente contenga informazioni di contatto accurate e magari un collegamento a una pagina Web che descrive cosa si sta facendo e come lo si fa. Se un amministratore web sta vedendo molte richieste da te ed è curioso, potresti essere in grado di rispondere a molte domande con una pagina web informativa.

3

Oltre alle buone risposte di WillDean e Einar, mi raccomando vivamente di dedicare un po 'di tempo a leggere il significato dei codici di risposta HTTP e cosa dovrebbe fare il crawler quando si imbattono in ognuno di essi, dal momento che farà una grande differenza la tua esibizione, e se no sei bannato da alcuni siti.

Alcuni link utili:

HTTP/1.1: Status Code Definitions

Aggregator client HTTP tests

Wikipedia

3

Si prega di essere sicuri di includere un URL nella stringa user-agent che spiega chi/cosa/perché il vostro robot è strisciando.

3

Inoltre, non dimenticare di obbedire alle bot meta tag: http://www.w3.org/TR/html4/appendix/notes.html#h-B.4.1.2

Un'altra cosa a cui pensare - quando le pagine di ragno, non abbiate troppa fretta le cose che decidono non esistono o hanno errori. Alcune pagine sono offline a causa di lavori di manutenzione o errori che vengono corretti in un breve periodo.

+1

Se sospetto che debba esistere una pagina, perché è indicata da altre pagine, avrei il codice che l'ha inserita nella mia coda "riprova", quindi potrei riprovare più tardi. Se fallisse di nuovo, il contatore aumenterebbe, finché il contatore non superasse il mio limite per tentativi, o la pagina tornasse online. –

3

Tutti i punti positivi, quelli fatti qui. Dovrai anche occuparti di collegamenti Java e JavaScript generati dinamicamente, parametri e ID di sessione, evasione di virgolette singole e doppie, tentativi falliti di collegamenti relativi (usando ../../ per andare oltre la directory radice), distinzione tra maiuscole e minuscole, cornici, reindirizzamenti, biscotti ....

Potrei andare avanti per giorni, e un pò. Ho un Robots Checklist che copre la maggior parte di questo, e sono felice di rispondere a quello che posso.

Si dovrebbe anche pensare di utilizzare il codice del crawler robot open-source, perché ti dà un enorme vantaggio su tutti questi problemi. Ho anche una pagina su questo: open source robot code. Spero possa aiutare!

2

È necessario aggiungere alcune funzionalità per inserire nella blacklist siti/domini o altre cose (intervalli IP, ASN, ecc.) Per evitare che il ragno si impantanasse con i siti di spam.

Avrete bisogno di un'implementazione HTTP con un sacco di controllo su timeout e comportamento. Aspettatevi un sacco di siti per rimandare risposte non valide, risposte enormi, intestazioni di spazzatura o semplicemente lasciare aperta la connessione a tempo indeterminato senza risposta ecc.

Inoltre non fidatevi di uno stato di 200 per indicare "la pagina esiste". Una gran parte dei siti restituisce 200 per "Non trovato" o altri errori, nella mia esperienza (Insieme a un grande documento HTML).

+1

Otterrai "200" per le pagine di errore personalizzate che sono intrappolate all'interno del loro sito e internamente reindirizzate a "Ehi, questa pagina non esiste ma ti stiamo aiutando dicendoti di sì". pagina, che in realtà non aiuta affatto l'autore di un ragno. –

Problemi correlati