2014-11-16 65 views
1

我想抓取geocaching.com,但一些像coords這樣的數據只能用於用戶。使用「爬行」從故宮 Im和現在已經知道如何登錄與履帶式,但我已經得到了登錄表單的名字:NodeJS Crawler登錄網站

  • ctl00 $ ContentBody $ tbUsername:用戶
  • ctl00 $ ContentBody $ tbPassword :passwaord
  • ctl00 $ ContentBody $ btnSignIn: 「簽名+在」

這是到目前爲止我的代碼:

var Crawler = require("crawler"); 
var url = require('url'); 
var mongoose = require("mongoose"); 
var Cache = require("./models/cache.js"); 

mongoose.connect("localhost:27017/Cache"); 

var removeTags = function(text){ 
    return String(text).replace(/(<([^>]+)>)/ig,''); 
}; 
var c = new Crawler({ 
    maxConnections: 10, 
    skipDuplicates: true, 

    callback: function (error, result, $) { 

     if (result.request.uri.href.startsWith("http://www.geocaching.com/geocache/")) { 
      var cache = new Cache(); 
      var id = removeTags($(".CoordInfoCode")); 
      Cache.count({ 
       "_id": id 
      }, function (err, count) { 
       if (err) 
        return; 
       else if (count < 1) { 
        //Saving the data 
       } 

      }); 


     } 
     if (result.headers['content-type'] == "text/html; charset=utf-8") { 
      if ($('a').length != 0) { 
       $('a').each(function (index, a) { 
        var toQueueUrl = $(a).attr('href'); 
        process.nextTick(function() { 
         process.nextTick(function() { 
          c.queue(toQueueUrl); 
         }) 
        }); 

       }); 
      } 
     } 

    } 
}); 

c.queue('http://www.geocaching.com/seek/nearest.aspx?ul=Die_3sten_3'); 

回答

-3

我在github上做了一個javascript爬蟲的例子。

它是事件驅動的,並使用內存中的隊列來存儲所有資源(即。urls)。

如何在節點環境

var Crawler = require('../lib/crawler') 
var crawler = new Crawler('http://www.someUrl.com'); 

// crawler.maxDepth = 4; 
// crawler.crawlInterval = 10; 
// crawler.maxListenerCurrency = 10; 
// crawler.redisQueue = true; 
crawler.start(); 

在這裏用我只是顯示你一個javascript履帶2核心方法。

Crawler.prototype.run = function() { 
    var crawler = this; 
    process.nextTick(() => { 
    //the run loop 
    crawler.crawlerIntervalId = setInterval(() => { 

     crawler.crawl(); 

    }, crawler.crawlInterval); 
    //kick off first one 
    crawler.crawl(); 
    }); 

    crawler.running = true; 
    crawler.emit('start'); 
} 


Crawler.prototype.crawl = function() { 
    var crawler = this; 

    if (crawler._openRequests >= crawler.maxListenerCurrency) return; 


    //go get the item 
    crawler.queue.oldestUnfetchedItem((err, queueItem, index) => { 
    if (queueItem) { 
     //got the item start the fetch 
     crawler.fetchQueueItem(queueItem, index); 
    } else if (crawler._openRequests === 0) { 
     crawler.queue.complete((err, completeCount) => { 
     if (err) 
      throw err; 
     crawler.queue.getLength((err, length) => { 
      if (err) 
      throw err; 
      if (length === completeCount) { 
      //no open Request, no unfetcheditem stop the crawler 
      crawler.emit("complete", completeCount); 
      clearInterval(crawler.crawlerIntervalId); 
      crawler.running = false; 
      } 
     }); 
     }); 
    } 

    }); 
}; 

這裏是github鏈接https://github.com/bfwg/node-tinycrawler。 這是一個在1000行代碼下編寫的JavaScript網絡爬蟲程序。 這應該會讓你走上正軌。