NodeJS Web抓取使用节点抓取工具或简单抓取工具

时间:2018-05-07 16:11:15

标签: node.js web-crawler

我是网络抓取的新手,我需要关于这两个Node JS抓取工具的一些指示。

目标:我的目标是抓取网站并仅获取该域内的内部(本地)网址。我对任何页面数据或抓取都不感兴趣。只是网址。

我的困惑:使用node-crawlersimplecrawler时,他们是否必须在返回回复之前下载整个页面?有没有办法只找到一个URL,ping可能会执行一些get请求,如果200响应,只需继续下一个链接而不必实际请求整个页面数据?

是否还有其他可以请求和记录网址的NodeJS抓取工具或蜘蛛?我担心的是尽可能轻量化爬行。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

仅抓取网站的HTML页面通常是一个非常轻量级的过程。为了能够抓取网站,还需要下载HTML正文的响应正文,因为会搜索HTML以寻找其他网址。

simplecrawler是可配置的,因此您可以避免从网站下载图像等。这是一个片段,可用于记录抓取工具访问的网址,避免下载图片资源。

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();
相关问题