Node.js 创建新实例时停止节点simplecrawler实例(使其行为类似于单例)
海洛,各位 我正在做一个刮刀,它使用。一切运行正常,但我不知道如何在创建新实例时停止一个实例(我希望一次只运行一个实例)。我使用的是express,所有的抓取逻辑都在一条路线上。为了立即取消爬网,我需要停止节点进程并再次运行应用程序 下面是与运行爬虫程序有关的代码部分(注意:我对代码进行了一点简化,因此代码更短):Node.js 创建新实例时停止节点simplecrawler实例(使其行为类似于单例),node.js,express,Node.js,Express,海洛,各位 我正在做一个刮刀,它使用。一切运行正常,但我不知道如何在创建新实例时停止一个实例(我希望一次只运行一个实例)。我使用的是express,所有的抓取逻辑都在一条路线上。为了立即取消爬网,我需要停止节点进程并再次运行应用程序 下面是与运行爬虫程序有关的代码部分(注意:我对代码进行了一点简化,因此代码更短): 每个simplecrawler实例都有一个stop方法,可以调用该方法来防止爬虫发出任何进一步的请求(但是请求不会在飞行中停止) 我可能会将爬虫实例存储在路由处理程序之外的一个作用域
每个simplecrawler实例都有一个
stop
方法,可以调用该方法来防止爬虫发出任何进一步的请求(但是请求不会在飞行中停止)
我可能会将爬虫实例存储在路由处理程序之外的一个作用域中,检查它是否首先在路由处理程序中定义,在这种情况下,调用stop
方法,然后构造一个新的scraper
我删去了您代码中的很多内容,但我的想法是这样的:
module.exports = function(socket) {
var express = require('express');
var router = express.Router();
var Crawler = requrie('simplecrawler');
var crawler;
router.post('/', function(req, res, next) {
// Check if URL exist
request(url.href, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Stop any crawler that's already running
if (crawler instanceof Crawler) {
crawler.stop();
}
// Crawler configuration
crawler = new Crawler(url.host);
crawler.initialPort = 80;
crawler.initialPath = url.pathname;
// Run the crawler
crawler.start();
// Execute for each URL, on fetchcomplete
crawler.on('fetchcomplete', function(item, responseBuffer, response) {
// [Do stuff with the scraped page]
});
// Completed crawling. Now let's get to work!
crawler.on('complete', function() {
// [Get all scraped pages and do something with them]
});
} else if(error) {
console.log(error);
}
});
});
return router;
}
每个simplecrawler实例都有一个
stop
方法,可以调用该方法来防止爬虫发出任何进一步的请求(但是请求不会在飞行中停止)
我可能会将爬虫实例存储在路由处理程序之外的一个作用域中,检查它是否首先在路由处理程序中定义,在这种情况下,调用stop
方法,然后构造一个新的scraper
我删去了您代码中的很多内容,但我的想法是这样的:
module.exports = function(socket) {
var express = require('express');
var router = express.Router();
var Crawler = requrie('simplecrawler');
var crawler;
router.post('/', function(req, res, next) {
// Check if URL exist
request(url.href, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Stop any crawler that's already running
if (crawler instanceof Crawler) {
crawler.stop();
}
// Crawler configuration
crawler = new Crawler(url.host);
crawler.initialPort = 80;
crawler.initialPath = url.pathname;
// Run the crawler
crawler.start();
// Execute for each URL, on fetchcomplete
crawler.on('fetchcomplete', function(item, responseBuffer, response) {
// [Do stuff with the scraped page]
});
// Completed crawling. Now let's get to work!
crawler.on('complete', function() {
// [Get all scraped pages and do something with them]
});
} else if(error) {
console.log(error);
}
});
});
return router;
}
非常感谢你!这正是我需要的!我唯一没有想到的是从路由处理程序中获取爬虫实例!非常感谢你的回答!非常感谢你!这正是我需要的!我唯一没有想到的是从路由处理程序中获取爬虫实例!非常感谢你的回答!