从 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));
我目前正在做一个项目,有一些关于 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));