如何检索nodejs刮取的数据并在html中显示

如何检索nodejs刮取的数据并在html中显示,html,node.js,angularjs,web-scraping,Html,Node.js,Angularjs,Web Scraping,我正在尝试使用NodeJs从一个网站中获取一些内容,这一切都很好,但是刮取的文本仅在控制台中显示。然而,我想将刮取的数据传递到我的html页面(index.html),但不知道如何做 这是我的nodejs文件(scrape.js) 这是我的html文件,数据应该在其中显示(index.html) 实时数据 实时数据 实时数据 标题 数据。。。 技术支持 实时数据 我的请求非常简单,我想在(index.html)中的nodejs(scrape.js)中显示刮取的数据您应该能够为此使用EJS(或

我正在尝试使用NodeJs从一个网站中获取一些内容,这一切都很好,但是刮取的文本仅在控制台中显示。然而,我想将刮取的数据传递到我的html页面(index.html),但不知道如何做

这是我的nodejs文件(scrape.js)

这是我的html文件,数据应该在其中显示(index.html)


实时数据
实时数据
实时数据
标题
数据。。。
技术支持
实时数据

我的请求非常简单,我想在(index.html)中的nodejs(scrape.js)中显示刮取的数据您应该能够为此使用EJS(或者任何其他模板引擎)

我们将标题下载到一个数组中,然后使用ejs.render进行渲染

请确保使用安装ejs

npm install ejs
在项目中,您需要创建以下结构:

  • /index.js
  • /视图/index.ejs
index.js

const request = require('request');
const cheerio = require('cheerio');
const express = require('express');

var app = express();
app.set('view engine', 'ejs');

app.get('/', function(req, res) {
    request('https://store.steampowered.com/search/?filter=weeklongdeals', (error, response, html) => {
        if(!error && response.statusCode == 200) {
            const $ = cheerio.load(html);
            let titles = [];
            $('.title').each((i,ele) => {
                const title = $(ele).text();
                console.log(title);
                titles.push(title);
            });
            res.render('index', { titles });
        }
    })

});

app.listen(8080);
console.log('Express listening on port 8080');
<!DOCTYPE html>
<html>
<title>Real Time Data</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<body style="padding: 2em">
    <table class="table table-striped table-bordered">
        <tr>
        <th>Title</th>
        </tr>
        <% for (let title of titles) { %>
        <tr>
        <td><%= title %></td>
        </tr>    
        <% } %>
    </table>
</body>
</html>
index.ejs

const request = require('request');
const cheerio = require('cheerio');
const express = require('express');

var app = express();
app.set('view engine', 'ejs');

app.get('/', function(req, res) {
    request('https://store.steampowered.com/search/?filter=weeklongdeals', (error, response, html) => {
        if(!error && response.statusCode == 200) {
            const $ = cheerio.load(html);
            let titles = [];
            $('.title').each((i,ele) => {
                const title = $(ele).text();
                console.log(title);
                titles.push(title);
            });
            res.render('index', { titles });
        }
    })

});

app.listen(8080);
console.log('Express listening on port 8080');
<!DOCTYPE html>
<html>
<title>Real Time Data</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<body style="padding: 2em">
    <table class="table table-striped table-bordered">
        <tr>
        <th>Title</th>
        </tr>
        <% for (let title of titles) { %>
        <tr>
        <td><%= title %></td>
        </tr>    
        <% } %>
    </table>
</body>
</html>

实时数据
标题
然后导航到localhost:8080/以查看呈现的页面


我已经创建了一个在线示例

您应该能够为此使用EJS(或者任何其他模板引擎)

我们将标题下载到一个数组中,然后使用ejs.render进行渲染

请确保使用安装ejs

npm install ejs
在项目中,您需要创建以下结构:

  • /index.js
  • /视图/index.ejs
index.js

const request = require('request');
const cheerio = require('cheerio');
const express = require('express');

var app = express();
app.set('view engine', 'ejs');

app.get('/', function(req, res) {
    request('https://store.steampowered.com/search/?filter=weeklongdeals', (error, response, html) => {
        if(!error && response.statusCode == 200) {
            const $ = cheerio.load(html);
            let titles = [];
            $('.title').each((i,ele) => {
                const title = $(ele).text();
                console.log(title);
                titles.push(title);
            });
            res.render('index', { titles });
        }
    })

});

app.listen(8080);
console.log('Express listening on port 8080');
<!DOCTYPE html>
<html>
<title>Real Time Data</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<body style="padding: 2em">
    <table class="table table-striped table-bordered">
        <tr>
        <th>Title</th>
        </tr>
        <% for (let title of titles) { %>
        <tr>
        <td><%= title %></td>
        </tr>    
        <% } %>
    </table>
</body>
</html>
index.ejs

const request = require('request');
const cheerio = require('cheerio');
const express = require('express');

var app = express();
app.set('view engine', 'ejs');

app.get('/', function(req, res) {
    request('https://store.steampowered.com/search/?filter=weeklongdeals', (error, response, html) => {
        if(!error && response.statusCode == 200) {
            const $ = cheerio.load(html);
            let titles = [];
            $('.title').each((i,ele) => {
                const title = $(ele).text();
                console.log(title);
                titles.push(title);
            });
            res.render('index', { titles });
        }
    })

});

app.listen(8080);
console.log('Express listening on port 8080');
<!DOCTYPE html>
<html>
<title>Real Time Data</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<body style="padding: 2em">
    <table class="table table-striped table-bordered">
        <tr>
        <th>Title</th>
        </tr>
        <% for (let title of titles) { %>
        <tr>
        <td><%= title %></td>
        </tr>    
        <% } %>
    </table>
</body>
</html>

实时数据
标题
然后导航到localhost:8080/以查看呈现的页面


我创建了一个在线示例

是@Terry说的,但是使用get和map,而不是在每个循环中推送元素:

let titles = $('.title').get().map(e => $(e).text())

@Terry说了什么,但使用get和map而不是在每个循环中推送元素:

let titles = $('.title').get().map(e => $(e).text())

你好!有多种方法可以实现您想要的结果,但是,我建议您使用模板引擎。你可以退房。模板引擎可以帮助您管理如何将数据传递和转换为标记。仅供参考,它是被刮(刮、刮、刮)的,而不是被刮!有多种方法可以实现您想要的结果,但是,我建议您使用模板引擎。你可以退房。模板引擎可以帮助您管理如何传递数据并将其转换为标记。仅供参考,它已被刮除(刮除、刮除、刮除)而不是刮除Hanks bro,它现在工作正常,我想问一件事,我如何访问数组标题并获取索引元素?例如(title[0])您可以使用titles[0]来访问.ejs页面中的数组元素。我用的是一个。。但是你也可以用一个普通的for循环。使用hi-bro代替hi-bro,我尝试了你的示例,得到了正确的索引元素,但问题是当我使用标题[0]时,它是一个重复的数据,例如(锈迹,锈迹,锈迹)。你认为问题出在哪里?哦,嘿,你需要循环一下标题,比如感谢兄弟,现在它工作得很好,我想问一件事,我如何访问数组标题并获取索引元素?例如(title[0])您可以使用titles[0]来访问.ejs页面中的数组元素。我用的是一个。。但是你也可以用一个普通的for循环。使用hi-bro代替hi-bro,我尝试了你的示例,得到了正确的索引元素,但问题是当我使用标题[0]时,它是一个重复的数据,例如(锈迹,锈迹,锈迹)。你认为问题出在哪里?哦,嘿,你需要像这样循环标题