2017-03-04 2 views
0

Ich versuche eine Website für einige Inhalte zu verschrotten, es funktioniert alles gut, aber dann ist der verschrottete Text für mich nur in der Konsole verfügbar, aber ich möchte diese verschrotteten Daten in meinem Browser ausdrucken. Ich denke, ich mache etwas falsch mit dem Umgang mit Rückrufen. Kann mir bitte jemand helfen?nodejs Web Verschrottung und Rückruf Probleme

Mein Code ist unten:

app.get('/test', function(req, res) { 

     //All the web scraping magic will happen here 
    var url = 'https://www.mywebsite.com/path/to/abc'; 
    var allText; 
    var getTheText = function() { 
      request(url, function getText(error, response, html){ 

     // First we'll check to make sure no errors occurred when making the request 

     if(!error){ 
      // Next, we'll utilize the cheerio library on the returned html which will essentially give us jQuery functionality 

      var $ = cheerio.load(html); 

      // Finally, we'll define the variables we're going to capture 

      var allText = $('body').children().find('p').text() 

       console.log('allText'); 
       console.log(allText); 
      return allText; 
     } 
     else { 
     } 

     //return result; 
    }); 
      console.log(allText); 

    } 

getTheText(); 
    console.log('gettheText is ' + getTheText()); 
    res.send(allText); 
}) 
+0

Nur ein Tipp, Verarbeitung von cheerio wile Verarbeitung Anfrage nicht verarbeiten. Schieben Sie es mit redis oder kue in den Hintergrundjob. Sobald Sie mit dem Scraping fertig sind, drücken Sie die Ergebnisse auf websocket oder senden Sie ein Ereignis über ws, um die Ergebnisse zu holen – georoot

Antwort

0

Send Antwort von Callback-Funktion, wo Daten verfügbar sind. Bitte siehe unten stehenden Code:

app.get('/test', function(req, res) { 

    //All the web scraping magic will happen here 
    var url = 'https://www.mywebsite.com/path/to/abc'; 
    var allText; 
    var getTheText = function() { 
    request(url, function getText(error, response, html) { 

     // First we'll check to make sure no errors occurred when making the request 

     if (!error) { 
     // Next, we'll utilize the cheerio library on the returned html which will essentially give us jQuery functionality 

     var $ = cheerio.load(html); 

     // Finally, we'll define the variables we're going to capture 

     var allText = $('body') 
      .children() 
      .find('p') 
      .text() 

     console.log('allText'); 
     console.log(allText); 
     // return allText; 
     res.send(allText); // Send response from here 
     } else {} 

     //return result; 
    }); 
    console.log(allText); 

    } 

    getTheText(); 
    console.log('gettheText is ' + getTheText()); 
    // res.send(allText); // Remove this line 
})