現在、私が取り組んでいるTensorFlow実装の記事データを取得しようとしています。私が取り組もうとしている最初の情報源はBuzzfeedです。私はページを擦るためにnode.js async.jsライブラリを使用していますが、私は約200程度の記事の後にいつも彼らのサーバからECONNRESETエラーを取得して時間を持っています。非同期でアーカイブをスクラップする場合のECONNRESET
これを実行するとかなり早く要求が出るようですが、これが適用される遅延のためにasync.eachSeriesを使用することに決めました。私はこれを見続けるつもりですが、誰かが私が間違ってやっていること、あるいはこれを達成するためのよりよい方法を見たら、あなたが何を言わなければならないのか聞いてみたいと思います。ありがとう!
const scraper = testHelperGetScraper();
// scrape links to each news in buzz archive page
const archiveUrl = 'http://www.buzzfeed.com/archive';
let fileNum = -1;
scraper.scrapeArchiveDates(archiveUrl, function(err, dates){
async.eachSeries(dates.yearUrl, function(url, cb){
async.waterfall([
function(callback){
scraper.scrapeArchive(url, callback);
},
function(urlArr, callback){
for (var i in urlArr.url){
if (typeof (urlArr.url[i]) === 'string'){
scraper.scrapeArticle(urlArr.url[i], callback);
}
}
} ,function(res, callback){
cb();
callback(null, res);
}
],
function(err, buzzresult) {
if (err){
_logger.error('Error while inserting test data', err);
}
buzzresult.uniqueId = UniqueHelper.getUIntId({
text: buzzresult.title
, options: {
ignoreCase: true
, strip: ['urls', 'hashtags', 'users', 'quotes', 'punct']
}
});
let fileFullPath = _rootFolderWhereYouWantToSave
+ 'rawdata_' + buzzresult.uniqueId + '.txt';
//_logger.debug('fileFullPath', fileFullPath);
let finalDataWritten = buzzresult.title + os.EOL + buzzresult.body + os.EOL;
writeArticleFile(fileFullPath, finalDataWritten);
//console.log('Finsihed calling WriteArticleFile: ', finalDataWritten);
_counter += 1;
console.log('NumArticlesWritten: ', _counter);
});
}, function (error) {
if (error) {
throw error;
}
console.log('Finished!');
});
});
'... scraper.scrapeArticle(urlArr.url [i]は、コールバック);'ミックス非同期及び同期コードの問題です。 'for'を' async.each(urlArr、scraper.scrapeArticle、callback) 'に変更してください。 –