我正在尝试抓取我的旧静态网站,以便从数据中创建一个可用的json。
我有一个包含产品列表的页面(div = class ='product')。
我想我错过了嵌套请求的回调,因为我遇到了着名的JS Gotcha循环。
此处提供完整代码:https://pastebin.com/9jZTmtRr
1)从根页面收集一些常规信息并将其放在一个对象中:
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'))
})