JavaScript Web Scraping с Cheerio, затем классифицируется с естественной проблемой при записи в файл - PullRequest
0 голосов
/ 03 мая 2020

Я использую Cheerio для очистки HTML данных из массива URL-адресов веб-сайтов. Когда каждый URL очищается, он классифицируется с помощью Natural. Однако после классификации данных я хочу записать в файл, соответствующий классификации, т. Е. URL, классифицированный как азартная игра, записывается в categoryGambling.txt. Однако моя проблема заключается в том, что когда я в конце концов записываю URL в соответствующий файл, массив уже прошел итерацию, поэтому он просто записывает последний элемент в URL в файлы .txt. Поэтому вместо записи трех отдельных URL-адресов азартных игр и одного явного URL-адреса в соответствующие им файлы он записывает один и тот же URL-адрес (последний элемент в массиве) три раза в файле азартных игр и один раз в явном файле. Любая помощь очень ценится. Вот мой код:

const request = require('request');
const cheerio = require('cheerio');
var fs = require('fs');
var array = fs.readFileSync('URLS.txt').toString().split("\n");    
var natural = require('natural');
var classifier = new natural.BayesClassifier();
var gambling = fs.createWriteStream('categoryGambling.txt');
var explicit = fs.createWriteStream('categoryExplicit.txt');
var technology = fs.createWriteStream('categoryTechnology.txt');
var entertainment = fs.createWriteStream('categoryEntertainment.txt');
var sports = fs.createWriteStream('categorySports.txt');
var marketingplatform = fs.createWriteStream('categoryMarketingplatform.txt');
var travel = fs.createWriteStream('categoryTravel.txt');
const trainer = require('./trainAlg.json');
//Train
trainer.forEach(item=>{
    classifier.addDocument(item.text, item.category);
})
classifier.train();

for(i in array) 
{
    var url = array[i];
    request(url, (error, response, html) => 
    {
        if(!error && response.statusCode==200)
        {
            const $ = cheerio.load(html);
            $('li, h3, h2, body, div, html').each((i, el) => 
            {
                var link = $(el).text();
                //Apply and Predict
                if(classifier.classify(link) == "explicit"){
                    explicit.write(link + '\n');
                }
                else if(classifier.classify(link) == "gambling"){
                    gambling.write(link + '\n');
                }
                else if(classifier.classify(link) == "technology"){ 
                    technology.write(link + '\n');
                }
                else if(classifier.classify(link) == "entertainment"){ 
                    entertainment.write(link + '\n');
                }
                else if(classifier.classify(link) == "sports"){ 
                    sports.write(link + '\n');
                }
                else if(classifier.classify(link) == "marketingplatform"){ 
                    marketingplatform.write(link + '\n');
                }
                else if(classifier.classify(link) == "travel"){ 
                    travel.write(link + '\n');
                }
            });
        }
    });
}
...