无法使用回调获取结果

问题描述 投票:0回答:1

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

但是,当我执行我的脚本时,它什么都不打印。它也不会抛出任何错误。我试图模仿尼尔在this post提供的逻辑。

我该怎么做呢?

我到目前为止写的:

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();
node.js web-scraping request cheerio
1个回答
1
投票

您从link收到的getPosts值是相对链接,这意味着请求失败。您可以在其自己的变量中提取主机名,并从主机名+相对链接创建完整的URL。

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

// ...

function getContent(item,link,callback){
  // Here we use the absolute URL
  request(host + 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});
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.