Impedire al crawler di interferire con il tracciamento degli utenti

2

Sto raschiando il testo da vari negozi online (senza immagini / video o altri dati). Non sono esperto nel tracciamento degli utenti, quindi mi piacerebbe sapere se c'è un modo per me di scrivere il mio crawler in modo che non interferisca con il monitoraggio dei proprietari del negozio online. Forse questo è già il caso in quanto il crawler non sta memorizzando alcun cookie, richiedendo immagini o nient'altro che le pagine reali, ma mi piacerebbe esserne sicuro.

Che cosa dovrei fare quando richiedi le pagine per garantire che nulla venga monitorato in Google Analytics, ad esempio? Devo inviare una e-mail ai proprietari dicendo loro di filtrare uno specifico user-agent o ...?

Ho visto Come essere un buon cittadino durante la scansione di siti Web? dove l'ultima risposta afferma che si dovrebbe aggiungere "crawler" o "spider" nell'user-agent. Non sono sicuro di cosa fare in quanto non riesco a trovare nulla di cui eseguire il backup.

(Il crawler è scritto in node.js e utilizza il modulo di richiesta per scaricare siti web)

EDIT: Per chiunque sia interessato, ecco il crawler infinitamente semplice che ho realizzato. Non obbedisce a robots.txt perché sto specificando che tipo di link voglio seguire io stesso (e sono troppo pigro adesso per scrivere qualcosa che obbedisce a robots.txt):

var request = require("request")
, cheerio = require("cheerio")
;

exports.crawl = function(options) {
    var links = [].concat(options.url) // Takes either an array of url's or just a string.
    , ongoingRequests = 0
    , index = 0
    , done = false
    ;
    process.nextTick(ticker);
    function ticker() {
        if(ongoingRequests < options.maxRequests && index < links.length && !done) {
            var url = links[index++];
            ongoingRequests++;
            if(options.debug) console.log("Downloading " + url);
            request({ url: url, encoding: options.encoding || "utf-8" }, function(err, response) {
                ongoingRequests--;
                if(err) {
                    return;
                }
                if(!done) {
                    var $ = cheerio.load(response.body)
                    , shouldContinue = options.data($, response, url)
                    ;
                    if(shouldContinue === false) {
                        console.log("Crawler interrupted.");
                        options.done();
                        done = true;
                    }
                    var  newLinks = options.extractLinks($).filter(function(url, i) { return links.indexOf(url, i + 1) === -1; });
                    if(options.debug && newLinks.length) console.log(newLinks);
                    links = links.concat(newLinks);
                    if((index - 1) % 5 === 0) console.log("Current index: " + (index - 1) + ", links found so far: " + links.length);
                }
            });
        } else if(!ongoingRequests) {
            if(!done) {
                options.done();
                done = true;
            }
            return;
        }
        process.nextTick(ticker);
    }
};

Usalo in questo modo:

var crawler = require("../crawler");

crawler.crawl({
    url: "http://website.com"
    , debug: true
    , maxRequests: 5
    , data: function($, response, url) {
        if(url.indexOf("/product/") === -1) {
            return;
        }
        console.log("extract stuff from $ using CSS-selectors and a nice jQuery-like API");
    }
    , done: function() {
        console.log("DONE!!");
    }
    , extractLinks: function($) {
        return $("a").map(function() {
            return $(this).attr("href");
        }).filter(function(url, i, a) {
            if(!url || url[0] !== "/") {
                return false;
            }
            return i === a.indexOf(url) // Remove duplicates
            && url.indexOf("/cart") === -1
                    && url.indexOf(".htm") > -1
            ;
        }).map(function(url) {
            return "http://website.com" + url;
        });
    }
});
    
posta Jan Sommer 19.03.2013 - 18:03
fonte

1 risposta

2

Il monitoraggio di Google Analytics è implementato come javascript che viene eseguito nel browser. Il crawler richiede solo la pagina, non esegue alcun javascript che può essere trovato su di esso. Quindi, non c'è motivo per cui ti preoccupi di fare scherzi con il monitoraggio degli utenti.

    
risposta data 21.03.2013 - 06:47
fonte

Leggi altre domande sui tag