首页 > 解决方案 > Puppeteer 循环并转换为对象

问题描述

我是 puppetetteer 库的新手,我正在尝试遍历亚马逊评论并将每条评论保存为一个对象。

它似乎正在工作,但它只会获取第一条评论并完成。

async function scrapeProduct(urls) {
    urls.map(async function(url, index) {
        const browser = await puppeteer.launch({ headless: true });
        const page = await browser.newPage();
        await page.goto(url);
        await page.waitFor(5000);

        const result = await page.$$eval('.filterable-reviews-content', rows => {
            return rows.map(review => {
                const properties = {};
                const titleElement = review.querySelector(".review-title-content span");
                properties.title = titleElement.innerText;
                properties.ranking = review.querySelector(".review-title-content span");
                // return properties;
            })
        })
})

我的另一个尝试是这个......它抓住了所有东西,但把它全部推到了一个字符串上。

let content = await page.evaluate(() => {
    let commentWrapper = [...document.querySelectorAll('.filterable-reviews-content')];
    return commentWrapper.map(item => {
        return item.textContent.replace(/(\r\n|\n|\r)/gm,"")
    } );
  });

我真的很感激帮助。谢谢你!

标签: javascriptnode.jsjavascript-objectspuppeteer

解决方案


我认为你需要改进你的选择器。这可能有效

const result = await page.$$eval('.filterable-reviews-content .a-section.review', rows => {
    return rows.map(review => {
        const properties = {};
        const titleElement = review.querySelector(".review-title-content span");
        properties.title = titleElement.innerText;
        properties.ranking = review.querySelector(".review-title-content span");
        return properties;
    })
})

推荐阅读