egypt-banks-scraper
Version:
Scrape exchange rates from Egypt banks
58 lines (50 loc) • 1.6 kB
JavaScript
const path = require('path');
const env = require('node-env-file');
env(path.join(`${__dirname}../../../.env`));
export default class Bank {
/**
* @param {Object} bankName names of the bank acronym, english,
* arabic, etc
* @param {String} url of the bank exchange rates web page
*/
constructor(bankName, bankURL, selector) {
this.name = bankName;
this.url = bankURL;
this.selector = selector;
}
/**
* Request then pass html to scraper function for scraping
* @param {function} finish callback to pass rates to when finish scraping
*/
async scrape(browser) {
/**
* [rates description]
* @type {Array} rates [
* {
* code: USD, //currency iso code
* buy: 20.4,
* sell: 18.25
* },
* {
* code: EUR,
* buy: 18,
* sell: 16.5
* }
* ]
*/
let rates = null;
try {
const page = await browser.newPage();
await page.setDefaultNavigationTimeout(process.env.timeout);
await page.goto(this.url);
await page.waitForSelector(this.selector);
const bodyHandle = await page.$('body');
const html = await page.evaluate(body => body.innerHTML, bodyHandle);
rates = this.scraper(html);
return (rates);
} catch (e) {
console.log(this.url, '\nerror on get page by puppeteer:', e);
return [];
}
}
}