Gestisco un sito Web per un cliente in cui visualizzano un ampio database di informazioni che hanno raccolto accuratamente e lentamente nel corso degli anni. Stanno trovando i loro dati sul Web in vari luoghi. Molto probabilmente ciò è dovuto al fatto che un raschietto passa attraverso il proprio sito pagina per pagina ed estrae le informazioni di cui hanno bisogno in un proprio database. E nel caso ti stia chiedendo, sanno che sono i loro dati a causa di un singolo pezzo di dati piantati in ogni categoria sul loro sito.
Ho fatto molte ricerche su questo negli ultimi due giorni e posso dirti che non esiste una soluzione perfetta per tutti. Ho trovato diverse cose da fare per renderlo un po 'più difficile per loro comunque. Questo è ciò che ho implementato per il cliente.
Dati impaginati Ajaxified
Se disponi di molti dati impaginati e stai impaginando i tuoi dati semplicemente aggiungendo un numero diverso alla fine del tuo URL, ad esempio http://www.domain.com/category/programming/2 - Quindi stai facendo il lavoro del crawler è molto più semplice. Il primo problema è che si trova in un modello facilmente identificabile, quindi impostare un raschietto su queste pagine è facile come una torta. Secondo problema, indipendentemente dall'URL delle pagine successive nella categoria, molto probabilmente ci sarebbe un collegamento successivo e precedente a cui agganciarsi.
Caricando i dati impaginati tramite javascript senza ricaricare la pagina, ciò complica notevolmente il lavoro di molti scraper. Google solo di recente ha iniziato ad analizzare javascript sulla pagina. Ci sono pochi svantaggi nel ricaricare i dati in questo modo. Fornisci a Google alcune pagine in meno da indicizzare, ma, tecnicamente, i dati impaginati dovrebbero comunque puntare alla pagina della categoria principale tramite la canonicalizzazione. Ajaxify le tue pagine di dati paginate.
Randomizza l'output del modello
I raschiatori saranno spesso leggermente personalizzati per i tuoi dati specifici. Si attaccheranno a un certo div id o classe per il titolo, la terza cella in ogni riga per la descrizione, ecc. Esiste un modello facilmente identificabile per la maggior parte dei raschiatori con cui lavorare poiché la maggior parte dei dati provengono dalla stessa tabella, viene visualizzato dallo stesso modello. Randomizza i tuoi ID div e i nomi delle classi, inserisci casualmente le colonne vuote della tabella con larghezza 0. Mostra i tuoi dati in una tabella su una pagina, in div in stile e una combinazione su un altro modello. Presentando i tuoi dati in modo prevedibile, possono essere raschiati in modo prevedibile e preciso.
Vaso di miele
Questo è abbastanza pulito nella sua semplicità. Mi sono imbattuto in questo metodo in diverse pagine sulla prevenzione dello scraping del sito.
- Crea un nuovo file sul tuo server chiamato gotcha.html.
- Nel tuo file robots.txt, aggiungi quanto segue:
Agente utente: *
Non consentire: /gotcha.html
Questo dice a tutti i robot e ragni là fuori che indicizzano il tuo sito per non indicizzare il file gotcha.html. Qualsiasi normale crawler web rispetterà i desideri del tuo file robots.txt e non accederà a quel file. cioè Google e Bing. In realtà potresti voler implementare questo passaggio e attendere 24 ore prima di passare al passaggio successivo. Ciò assicurerà che un crawler non venga accidentalmente bloccato da te a causa del fatto che era già a metà scansione quando hai aggiornato il file robots.txt. - Inserisci un link a gotcha.html da qualche parte sul tuo sito web. Non importa dove. Consiglio a piè di pagina, tuttavia, assicurarsi che questo collegamento non sia visibile, nei CSS, display: none;
- Ora, registra l'IP / informazioni generali dell'autore che ha visitato questa pagina e bloccale. In alternativa, potresti creare uno script per fornire loro dati errati e inutili. O forse un bel messaggio personale da te a loro.
I normali visualizzatori Web non saranno in grado di vedere il link, quindi non verrà accidentalmente cliccato. I crawler stimabili (ad esempio Google) rispetteranno i desideri di robots.txt e non visiteranno il file. Quindi, gli unici computer che dovrebbero inciampare in questa pagina sono quelli con intenzioni dannose, o qualcuno che visualizza il tuo codice sorgente e fa clic in modo casuale in giro (e vabbè se succede).
Ci sono un paio di ragioni per cui questo potrebbe non funzionare sempre. Innanzitutto, molti scraper non funzionano come i normali crawler Web e non solo scoprono i dati seguendo ogni link da ogni pagina del tuo sito. Gli raschietti sono spesso costruiti per essere fissati su determinate pagine e seguono solo determinate strutture. Ad esempio, un raschietto può essere avviato su una pagina di categoria e quindi detto di visitare solo gli URL con la parola / i dati nella lumaca. In secondo luogo, se qualcuno sta eseguendo il proprio raschietto sulla stessa rete di altri e viene utilizzato un IP condiviso, sarà vietata l'intera rete. Dovresti avere un sito Web molto popolare perché questo sia un problema.
Scrivi i dati alle immagini al volo
Trova un campo di dati più piccolo, non necessariamente lunghe stringhe di testo in quanto ciò può rendere lo stile della pagina un po 'più difficile. Uscita questi dati all'interno di un'immagine, sono abbastanza fiducioso che ci sono metodi in quasi tutti i linguaggi di programmazione per scrivere dinamicamente un testo su un'immagine (in php, imagettftext). Questo è probabilmente più efficace con valori numerici poiché i numeri forniscono un vantaggio SEO molto più insignificante.
Alternativa
Questa non era un'opzione per questo progetto. Richiede un accesso dopo un determinato numero di visualizzazioni di pagina o la visualizzazione di una quantità limitata di dati senza aver effettuato l'accesso. Ad esempio, se si dispone di 10 colonne, vengono visualizzate solo 5 per gli utenti non connessi.
Non commettere questo errore
Non preoccuparti di provare a trovare una sorta di soluzione basata sull'agente utente del bot. Questa informazione può essere facilmente falsificata da un raschietto che sa cosa sta facendo. Il bot di Google, ad esempio, può essere facilmente emulato. Molto probabilmente non vuoi vietare Google.