【问题标题】:Unable to fetch results using callback无法使用回调获取结果
【发布时间】:2019-04-09 16:31:44
【问题描述】:

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

但是,当我执行我的脚本时,它什么也没打印。它也不会抛出任何错误。我试图模仿 Neilthis 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();

【问题讨论】:

  • 猜测您的请求之一会返回错误或响应代码,该代码不是 200,因此不会被记录。尝试添加else { console.error(error); }

标签: node.js web-scraping request cheerio


【解决方案1】:

您从getPosts 收到的link 值是一个相对链接,这意味着请求失败。您可以在其自己的变量中提取主机名,并从主机名 + 相对链接创建完整的 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});
    }
  });
}

【讨论】:

  • 这是一个非常愚蠢的错误。感谢@Samuel Vaillant 的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 2018-10-18
  • 2016-03-21
  • 2018-10-23
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多