Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 Node.js它会将相同的结果打印两次,而不是一次_Javascript_Node.js_Cheerio - Fatal编程技术网

Javascript Node.js它会将相同的结果打印两次,而不是一次

Javascript Node.js它会将相同的结果打印两次,而不是一次,javascript,node.js,cheerio,Javascript,Node.js,Cheerio,这是我的node.js应用程序代码: 这是我的html.js文件代码 /** * HTML Helpers */ 'use strict'; var cheerio = require('cheerio'); module.exports.gotHTML = function gotHTML(error, response, htmlBody) { if (!error && response.statusCode == 200) {

这是我的node.js应用程序代码:

这是我的html.js文件代码

    /**
 * HTML Helpers
 */
'use strict';

var cheerio = require('cheerio');


module.exports.gotHTML = function gotHTML(error, response, htmlBody) {
    if (!error && response.statusCode == 200) {

        const $ = cheerio.load(htmlBody);

        var reviews = [];
        var businesses = [];
        var combinedData;
        var reviewsSelectors = $('.js-hot-new-businesses-section .rating-qualifier');
        var businessSelectors = $('.js-hot-new-businesses-section .biz-name');

        reviewsSelectors.each(function (index, value) {
            reviews.push($(this).text().trim());
        });

        businessSelectors.each(function (index, value) {
            businesses.push($(this).text().trim())
        });

        combinedData = businesses.map(function (value, index) {
            return {businessName: value, reviewsTotal: reviews[index]};
        });

        combinedData.forEach(function(value, index) {
            console.log(value["businessName"] + " - " + value["reviewsTotal"]);
        })

    }
}
这是app.js文件代码

    'use strict';

const request = require('request');
const cheerio = require('cheerio');
const express = require('express');
const app = express();
const htmlHelpers = require('./html');


const url = 'https://www.yelp.com/sf';

request(url, htmlHelpers.gotHTML);


// Expose app
exports = module.exports = app;
当我执行这段代码时,为了打印第一个结果的名称和评论数量,它会打印两次。这是输出

Boba Guys - 24 reviews
Boba Guys - 24 reviews
Coletta Gelato - 23 reviews
Coletta Gelato - 23 reviews
An Chi - 29 reviews
An Chi - 29 reviews
顺便说一下,相同的代码在浏览器控制台中正确执行并打印所需的结果

Boba Guys - 24 reviews
Coletta Gelato - 23 reviews
An Chi - 29 reviews

这是因为当浏览器执行脚本时,ChereIO不执行页面中的脚本。Cheerio只关心HTML

看看你得到的回应


热门和新业务
25篇评论
$$
冰淇淋,
冰淇淋及;冷冻酸奶
CA旧金山
25篇评论
$$
冰淇淋,
冰淇淋及;冷冻酸奶

6周前开业

10篇评论 $$ 烹饪课 CA旧金山 10篇评论 $$ 烹饪课

4周前开业

11次审查 $ 面包店, 咖啡及;茶叶 CA旧金山 11次审查 $ 面包店, 咖啡及;茶叶

三周前开业


亲爱的Antonio,我尊重您对我的问题的关注,但根据您的版本,它只打印了一次,但需要另一个内容,而不是我想要的内容。@HaykMkhitaryan我已经更新了答案。现在您有了所有父元素的类名,并且可以构建所需的选择器。