我是Web爬网的新手,我需要一些有关这两个Node JS爬网程序的指针。
目的:我的目标是抓取网站并仅获取该域内的内部(本地)URL。我对任何页面数据或抓取都不感兴趣。只是网址。
我的困惑:使用node-crawler或simplecrawler时,他们是否必须下载整个页面才能返回响应?有没有一种方法只能查找URL,可以ping执行一些get请求,如果响应200,则直接进入下一个链接,而无需实际请求整个页面数据?
是否有其他NodeJS搜寻器或Spider只能请求和记录URL?我的担心是使爬网尽可能轻巧。
先感谢您。
最佳答案
仅爬网网站的HTML页面通常是一个非常轻量级的过程。还需要下载HTML正文的响应正文,以便能够爬网该站点,因为在HTML中搜索了其他URL。
simplecrawler是可配置的,因此您可以避免从网站下载图像等。这是一个片段,您可以用来记录搜寻器访问的URL并避免下载图像资源。
var Crawler = require("simplecrawler");
var moment = require("moment");
var cheerio = require("cheerio");
var crawler = new Crawler("http://example.com");
function log() {
var time = moment().format("HH:mm:ss");
var args = Array.from(arguments);
args.unshift(time);
console.log.apply(console, args);
}
crawler.downloadUnsupported = false;
crawler.decodeResponses = true;
crawler.addFetchCondition(function(queueItem) {
return !queueItem.path.match(/\.(zip|jpe?g|png|mp4|gif)$/i);
});
crawler.on("crawlstart", function() {
log("crawlstart");
});
crawler.on("fetchcomplete", function(queueItem, responseBuffer) {
log("fetchcomplete", queueItem.url);
});
crawler.on("fetch404", function(queueItem, response) {
log("fetch404", queueItem.url, response.statusCode);
});
crawler.on("fetcherror", function(queueItem, response) {
log("fetcherror", queueItem.url, response.statusCode);
});
crawler.on("complete", function() {
log("complete");
});
crawler.start();