Не удается напечатать некоторые элементы в новой функции - PullRequest
0 голосов
/ 08 апреля 2019

Я создал сценарий в node, используя request и cheerio для получения различных titles и links различных сообщений со своей целевой страницы, а затем пропустил эти titles и links вдругая функция, чтобы я мог извлечь title из этих links со своей внутренней страницы вместе со ссылкой профиля на пользователя, создавшего этот пост, который я определил как proLink.

Как можно распечатать эти titles, links и proLink из другой функции, используя обратный вызов?

Я уже написал:

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");
        return callback(items,links);
      });
    }
  });
}
getposts((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");
      return callback(item,link,proLink);
    }
  });
});

Еще раз: я хочу напечатать три item, link, proLink из них в другой функции, используя обратный вызов.

1 Ответ

0 голосов
/ 08 апреля 2019

Может быть, вы можете попробовать это:

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');
        return callback(items, links);
      });
    }
  });
}

function fetch(callback) {
  getposts((item, link) => {
    request(`https://stackoverflow.com${link}`, function(
      error,
      response,
      html
    ) {
      if (error) {
        console.log(link, error.message);
        return;
      }

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

fetch((item, link, proLink) => console.log({ item, link, proLink }));
...