Javascript 刮削:cheerio';s.each()//回调问题
我正在尝试从我的一个旧静态网站中提取数据,以生成一个可用的json 我有一个包含产品列表的页面(带有class='product'的div) 我想我错过了嵌套请求的回调,因为我遇到了著名的JS Gotcha循环 此处提供完整代码: 1) 从根页面收集一些常规信息并将其放入对象中:Javascript 刮削:cheerio';s.each()//回调问题,javascript,node.js,web-scraping,cheerio,node-request,Javascript,Node.js,Web Scraping,Cheerio,Node Request,我正在尝试从我的一个旧静态网站中提取数据,以生成一个可用的json 我有一个包含产品列表的页面(带有class='product'的div) 我想我错过了嵌套请求的回调,因为我遇到了著名的JS Gotcha循环 此处提供完整代码: 1) 从根页面收集一些常规信息并将其放入对象中: request(url, (err, resp, body) => { let $ = cheerio.load(body) let result = { name: $('.c
request(url, (err, resp, body) => {
let $ = cheerio.load(body)
let result = {
name: $('.card-container > h2').text(),
slogan: $('.card-container > h4').text(),
img: 'insert image',
short: 'insert short',
long: $('.card-container > p').text()
}
2) 然后,对于每个产品,打开其链接(嵌套请求?)并提取更多信息:
$('.product_description').each(function(index, element) {
let formattedName = $('a', this).text().replace('+', '').replace(' ', '').toLowerCase()
let tempObject = {
name: $('a', this).text(),
short: $('p', this).text(),
}
// Following part is where my problem lies
let productURL = baseURL + $('a', this).attr('href')
request(productURL, function (err, resp, html) {
let productBODY = cheerio.load(html)
return tempObject.slogan = productBODY('.product_detailed > h2').text()
})
// This is working fine
return result[formattedName] = tempObject
})
3) 输出到文件:
return fs.writeFile('output.js', JSON.stringify(result, null, 4), err => err ? console.log(err) : console.log('done'))
})