首页 文章

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

提问于
浏览
0

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

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

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

是否有任何其他NodeJS爬虫或蜘蛛可以请求和仅记录URL?我担心的是尽可能轻量级地抓取 .

先感谢您 .

1 回答

  • 2

    仅爬网网站的HTML页面通常是一个非常轻量级的过程 . 由于要搜索HTML以寻找其他URL,因此还需要下载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();
    

相关问题