Skip to content

Instantly share code, notes, and snippets.

@7flash
Created May 18, 2017 10:08
Show Gist options
  • Save 7flash/2d72beb62ca650ccf9ed26cf64970ecd to your computer and use it in GitHub Desktop.
Save 7flash/2d72beb62ca650ccf9ed26cf64970ecd to your computer and use it in GitHub Desktop.
Request + cheerio + corotines
var request = require('request');
var cheerio = require('cheerio');
var co = require('co');
function parse(url) {
// Make promise from calback
return new Promise((resolve, reject) => {
request({url}, function(error, response, body) {
if(error) return reject(error);
let $ = cheerio.load(body);
// Make cheerio iterable
$.fn[Symbol.iterator] = function* () {
let keys = Object.keys(this).filter((key) => Number.isInteger(+key));
for (let key in keys) {
yield this[key];
}
};
resolve($);
});
});
}
// Example
co(function* () {
let page = yield parse('http://www.bing.com/search?q=generator');
for(let link of page('#b_results > .b_algo > h2 > a')) console.log(page(link).attr('href'));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment