Node.js从Promise Async Function返回对象并将其显示在网页上吗?

时间:2019-11-03 14:44:14

标签: node.js express asynchronous web-scraping puppeteer

我是NodeJS的新手,并且想构建一个自定义的Web爬虫应用程序-到目前为止,我已经可以使用该爬虫,但是我想将返回的对象呈现在网页上。

抓取工具创建了一个包含视频数组的对象-该数组是我要在浏览器中显示的东西。

到目前为止,我已经设法使用console.log()呈现了结果,但是我想更进一步,并将其显示在网页上。有人知道我该怎么做吗?

index.js

const webscraping = require("./webscraping");
const express = require('express');
const app = express();

const pageURL = "https://example.com";

webscraping(pageURL).then(dataObj => {console.log(dataObj)})

scraper.js

const puppeteer = require("puppeteer");

const webscraping = async pageURL => {
    const browser = await puppeteer.launch({
        headless: true,
        args: ["--no-sandbox"]
    });
    const page = await browser.newPage();
    let dataObj = {};

    try {
        await page.goto(pageURL);

        const videoCollection = await page.evaluate(() => {
            const videoList = $('.cmn-list-product01 > li');
            const maxPages = $('.cmn-box-tabMain01').find(".next").prev().text();
            const curPage = $('.cmn-box-tabMain01').find(".col04").find(".on").text();
            let pageData = {
                all_pages: maxPages, current_page: curPage
            };
            let newVideoList = [];
            videoList.each(function () {
                const id = $(this).attr("data-content_id");
                const title = $(this).find('a').find('dl').find('dt').text();
                const image = $(this).find('.lazy').attr("data-original");

                newVideoList.push({
                    id,
                    title,
                    image
                });
            });

            const keywords = ["cooking", "tutorial"];
            const filteredVideos = newVideoList.filter(item => keywords.some(el => item.title.toLowerCase().includes(el)));
            filteredVideos.unshift(pageData);
            return filteredVideos;
        });

        dataObj = {
            total: videoCollection.length,
            videoCollection
        };
    } catch (e) {
        console.log(e)
    }

    browser.close();
    return dataObj;
};

module.exports = webscraping;

1 个答案:

答案 0 :(得分:0)

您需要的是模板引擎。看一下here。我个人更喜欢EJS

希望有帮助。