es2015 scraper

by kontrach

JavaScript

'use strict';

/* request and cheerio    */
const request = require("request");
const cheerio = require("cheerio");
const fs = require('fs');
const Q = require('q');
const baseUrl = 'http://www.remi.nieruchomosci.pl/';
const url = baseUrl + "oferty/mieszkania/wynajem/?page=";


var pageNum = 0;
var limit = 2;
var errors = [];
var properties = [];


var parser = {
    setPagesLimit($){
        var lastPageStr = $('.paging:not(".right") > li').last().find('a').text();
        limit = parseInt( lastPageStr, 10 ) - 1;
        console.log('in set limit', limit, lastPageStr);
    },
    saveProperties( offerLinks ){
        var promises = [];

        parser.getPropertiesData( offerLinks, promises );

        Q.allSettled( promises )
            .then( parser.saveData )
            .then( parser.parseNextPage );
    },
    saveData( results ){

        results.forEach(function(result){

            if (result.state === 'fulfilled'){
                //pageTitles.push(result.value);
                properties.push(result.value);
            } else {
                errors.push(result.reason);
            }
        });
    },
    getPropertiesData(offerLinks, promises){

        offerLinks.each( getPropertyData );

        function getPropertyData(i, link){

            var offerLink = baseUrl + link;
            var deferred = Q.defer();

            promises.push(deferred.promise);

            request( offerLink, (err, res, body) => {
                var property;

                if(!err){

                    property = parser.parseOffer(body);

                    deferred.resolve(property);
                }else{
                    deferred.reject('There was an error: ' + err);
                }

                return deferred.promise;
            });
        }
    },
    parseOffer(body){

        var $ = cheerio.load(body);

        var getPageTitle  = () => $('.pageTitle').text().replace(/\s+/g, '');

        var getPrice      = () => $('.offerPrice >...