【发布时间】:2019-09-04 15:36:36
【问题描述】:
我在node 中创建了一个脚本,使用promise 结合cheerio 将links 解析为来自网站的不同帖子的标题,然后从它的每个帖子中抓取title内页重用那些links。
如果我在getData 中取消注释这一行console.log($("h1 > a").eq(0).text());,我当前的脚本可以相应地获取它们。但是,第二个函数似乎仍然没有返回任何内容。
如何让脚本以现在的方式成功运行?
到目前为止我已经写了:
const request = require('request');
const cheerio = require('cheerio');
const link = 'https://stackoverflow.com/questions/tagged/web-scraping';
const base_link = 'https://stackoverflow.com';
const items = [];
const titles = [];
let getLinks = () => {
return new Promise((resolve, reject) => {
request(link, function(error, response, html) {
let $ = cheerio.load(html);
$('.summary').each(function() {
items.push(base_link + $(this).find(".question-hyperlink").attr("href"));
});
resolve(items);
});
});
};
let getData = (links) => {
return new Promise((resolve, reject) => {
for (let nurl of links) {
request(nurl, function(error, response, html) {
let $ = cheerio.load(html);
titles.push($("h1 > a").eq(0).text())
// console.log($("h1 > a").eq(0).text());
});
resolve(titles);
}
});
};
getLinks().then((resultList) => {
return getData(resultList)
})
执行上述脚本后,我没有得到任何结果,也没有错误。
【问题讨论】:
标签: node.js web-scraping promise request cheerio