使用async来获取存档时的ECONNRESET

时间:2016-08-12 14:12:23

标签: node.js asynchronous async.js

我目前正在尝试获取我正在处理的TensorFlow实现的一些文章数据。我试图反对的第一个来源是Buzzfeed。我正在使用node.js async.js库来抓取页面,但我有一点时间总是在大约200篇左右的文章后从他们的服务器获得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!');
    });
});

1 个答案:

答案 0 :(得分:1)

我稍微简化了你的代码 您可以使用命名函数来创建更易读的代码。

val json : string = "[{"Name":"Bad Boys","Year":1995}]"