无法使用回调获取结果

时间:2019-04-09 16:31:44

标签: node.js web-scraping request cheerio

我使用两个不同的函数nodegetPosts()getContent()中编写了一个脚本,在其中提供了回调,以便打印调用独立函数getResult()的结果。我的脚本中定义的选择器是完美的。

但是,当我执行脚本时,它不会打印任何内容。它也不会引发任何错误。我试图模仿this post Neil 所提供的逻辑。

我该怎么做?

到目前为止,我已经写过:

var request = require('request');
var cheerio = require('cheerio');

const url = 'https://stackoverflow.com/questions/tagged/web-scraping';

function getPosts(callback){
  request(url, function (error,response, html) {
    if (!error && response.statusCode == 200){
      var $ = cheerio.load(html);
      $('.summary .question-hyperlink').each(function(){
        var items = $(this).text();
        var links = $(this).attr("href");
        callback(items,links);
      });
    }
  });
}

function getContent(item,link,callback){
  request(link, function (error,response, html) {
    if (!error && response.statusCode == 200){
      var $ = cheerio.load(html);
      var proLink = $('.user-details > a').eq(0).attr("href");
      callback({item,link,proLink});
    }
  });
}

function getResult() {
  getPosts(function(item,link) {
    getContent(item,link,function(output){
      console.log(output);
    });
  });
}

getResult();

1 个答案:

答案 0 :(得分:1)

您从select user.stu_id, user.batch_id, subject.subject_id, subject.subject_name from user inner join subject_batch on user.batch_id = subject_batch.batch_id inner join subject on subject.subject_id = subject_batch.subject_id order by user.stu_id; 收到的link值是一个相对链接,表示请求失败。您可以在其自己的变量中提取主机名,然后从主机名+相对链接中创建完整的URL。

getPosts