我想抓取geocaching.com,但像coords这样的数据只适用于用户。 我正在使用" crawler"从npm开始,我现在知道如何使用crawler登录,但我已经获得了登录表单的名称:
到目前为止,这是我的代码:
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');
答案 0 :(得分:-3)
我在github上做了一个javascript crawler示例。
它是事件驱动的,并使用内存中队列来存储所有资源(即。url)。
如何在节点环境中使用
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网页爬虫。 这应该会让你走上正确的轨道。