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 >...