Nodejs вернуть объект из функции Promise Async и отобразить его на веб-странице? - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в NodeJS и хотел создать собственное приложение для веб-скребка - до сих пор у меня работал скребок, но я хотел бы отобразить возвращенный объект на веб-странице.

Скребок создаетобъект, который содержит массив видео - массив, который я хочу отобразить в браузере.

Пока что мне удалось отобразить результат с помощью 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 голосов
/ 03 ноября 2019

Вам нужен шаблонизатор. Взгляните здесь . Я лично предпочитаю EJS .

Надеюсь, это поможет.

...