从 request/cheerio 中提取数据

Extracting data from request/cheerio

我目前正在做一个项目,有一些关于 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 只存在于上面的代码段中,并且没有办法使其成为全局的(不介意)或以某种方式 return 它。有任何想法吗?

使用 Promises 可以帮助我们轻松提取和使用异步加载的数据。在下面的代码片段中,我将您的逻辑包装到一个函数中,该函数 returns 一个解析必要数据的 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));