Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 刮削:cheerio';s.each()//回调问题_Javascript_Node.js_Web Scraping_Cheerio_Node Request - Fatal编程技术网

Javascript 刮削:cheerio';s.each()//回调问题

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

我正在尝试从我的一个旧静态网站中提取数据,以生成一个可用的json

我有一个包含产品列表的页面(带有class='product'的div)

我想我错过了嵌套请求的回调,因为我遇到了著名的JS Gotcha循环

此处提供完整代码:

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'))
})