【问题标题】:Extracting data from request/cheerio从请求/cheerio 中提取数据
【发布时间】:2016-03-08 16:04:47
【问题描述】:

我目前正在做一个项目,并且有一些关于 javascript / nodejs / request / Cheerio 的问题。

request(address , function (error, response, html) {
    if (!error && response.statusCode == 200) {
      var $ = cheerio.load(html);
      $('iframe').each(function(i, element){
      var a = $(this).attr('src');
});

} });

所以我在上面的代码中精确地从某些网站上抓取了我想要的数据。我希望它稍后在某个模板中呈现它。然而,似乎 var a 只存在于上面的代码中,并且没有办法使它成为全局(不介意)或以某种方式返回它。有任何想法吗?

【问题讨论】:

标签: javascript node.js callback request cheerio


【解决方案1】:

使用 Promises 可以帮助我们轻松提取并在以后使用异步加载的数据。在下面的代码 sn-p 中,我将您的逻辑包装到一个函数中,该函数返回一个解析必要数据的 Promise:

function iframes(url) {
    return new Promise((resolve, reject) => {
        request(url , function (error, response, html) {
            if (!error && response.statusCode == 200) {
                const $ = cheerio.load(html);

                // Extract list of each iframe's src attribute
                const sources = $('iframe').map((i, element) => {
                    return element.attribs['src'];
                }).get();

                // Resolve iframe sources
                resolve(sources);
                return;
             }

             // You can pass more error information here
             reject('error loading url for iframe sources');
         });
    });
}

我们可以像这样使用这个函数:

iframes('http://www.w3schools.com/html/html_iframe.asp')
    .then(srcs => {
        // Can access the sources
        console.log(srcs);
    })
    .catch(err => console.log(err));

【讨论】:

  • 我会在几分钟内测试它,不过非常感谢您的努力!真的很感激
  • 嘿,它就像一个魅力!如果您不介意,我还有一个问题要跟进!正如你所说,我已经从函数 iframe 中提取了 src,现在我正在尝试使用 ejs 显示它们。所以我假设它们是可用的。我只是调用 render(toBeDisplayed.html.ejs) 但它仍然说变量未定义..尝试省略 var 等但仍然没有运气..
  • 当我尝试调试它时,我也会得到奇怪的结果.. console.log('prior render delLater: ' + links[0]);
  • 我必须查看代码才能确定,但​​我想知道您是否在 Promise(与源代码)得到解决之前调用了渲染函数。
  • 嗨,是的 - 这是一个问题。我只是通过将参数传递给渲染函数来修复它。非常感谢!
猜你喜欢
  • 2020-09-27
  • 2015-03-20
  • 1970-01-01
  • 2013-12-30
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2021-06-15
相关资源
最近更新 更多