NodeJS:用承诺解决两个URL的问题
我正在抓取r / theonion并将标题写入文本文件onion.txt。 之后,我打算把这些标题写入文本文件nottheonion.txt。 我成功写入onion.txt,但不写入notononion.txt。
var onion_url = "https://www.reddit.com/r/theonion";
var not_onion_url = "https://www.reddit.com/r/nottheonion";
var promise = new Promise(function(resolve, reject) {
request(onion_url, function(error, response, html) {
if (error) {
console.log("Error: " + error);
}
var $ = cheerio.load(html);
$("div#siteTable > div.link").each(function(idx) {
var title = $(this).find('p.title > a.title').text().trim();
console.log(title);
fs.appendFile('onion.txt', title + 'n');
});
});
});
promise.then(function(result) {
request(not_onion_url, function(error, response, html) {
if (error) {
console.log("Error: " + error);
}
var $ = cheerio.load(html);
$("div#siteTable > div.link").each(function(idx) {
var title = $(this).find('p.title > a.title').te . xt().trim();
console.log(title);
fs.appendFile('not_onion.txt', title + 'n');
});
});
}, function(err) {
console.log("Error with scraping r/nottheonion");
});
使用request-promise
和fs-promise
来简化你的代码,如果你想使用promises,并且使用function不会重复你自己。
var rp = require('request-promise');
var fsp = require('fs-promise');
var onion_url = "https://www.reddit.com/r/theonion";
var not_onion_url = "https://www.reddit.com/r/nottheonion";
function parse(html) {
var result = '';
var $ = cheerio.load(html);
$("div#siteTable > div.link").each(function(idx) {
var title = $(this).find('p.title > a.title').text().trim();
console.log(title);
result += title + 'n';
});
return result;
}
var append = file => content => fsp.appendFile(file, content);
rp(onion_url)
.then(parse)
.then(append('onion.txt'))
.then(() => console.log('Success'))
.catch(err => console.log('Error:', err));
rp(not_onion_url)
.then(parse)
.then(append('not_onion.txt'))
.then(() => console.log('Success'))
.catch(err => console.log('Error:', err));
这没有经过测试。
链接地址: http://www.djcxy.com/p/55375.html