Javascript 如何从所有这些元素创建CSV文件?

Javascript 如何从所有这些元素创建CSV文件?,javascript,node.js,web-scraping,puppeteer,Javascript,Node.js,Web Scraping,Puppeteer,我正在尝试从这两个部分获取文本,并将其转换为来自Puppeter的CSV列表: 项目编号:(项目1055688) 价格:($16.59) 以下是我尝试过的,但似乎无法找到SKU,例如: let elements = await.self.page.$$('div[class="row item-row"]'); for (let element of elements) { let sku = await element.$eval(('div[class="body-copy cust

我正在尝试从这两个部分获取文本,并将其转换为来自Puppeter的CSV列表:

项目编号:(项目1055688)

价格:($16.59)

以下是我尝试过的,但似乎无法找到SKU,例如:

let elements = await.self.page.$$('div[class="row item-row"]');
for (let element of elements) {
    let sku = await element.$eval(('div[class="body-copy custom-body- 
copy"]'), node => node.innerText.trim());
}
以下是我试图从中提取数据的代码:

<div class="col-xl-3 col-lg-3 col-md-6 col-sm-8 col-xs-6">
<div class="product_desc_txt">

    <a href=" https://www.costcobusinessdelivery.com/.product.1055688.html 
" class="body-copy-link">
        Pringles Snack Pack Potato Crisps, Original, 0.67 oz, 60 ct
    </a>
    <div class="body-copy custom-body-copy">
       Item&nbsp;1055688
    </div>

    <div class="margin_tp_10"></div>

    <div class="body-copy hidden visible-md visible-sm visible-xs 
visible-lg">

        <span  data-wishlist-linkfee="false" > $16.59</span>

    </div>

</div>
</div>
<div class="col-xl-2 col-lg-2 body-copy text-right hidden visible-xl ">

<span  data-wishlist-linkfee="false" > $16.59</span>


</div>

我是新来的木偶演员,所以我不确定我是否做得对,任何帮助或指导将不胜感激。谢谢大家!

我想您的页面结构与

在这种情况下,您可以使用以下代码:

// Find product descriptions
const csv = await page.$$eval('.product_desc_txt', function(products){

    // Iterate over product descriptions
    let csvLines = products.map(function(product){

        // Inside of each product find product SKU and its price
        let productId = product.querySelector(".custom-body-copy").innerText.trim();
        let productPrice = product.querySelector("span[data-wishlist-linkfee]").innerText.trim();

        // Fomrat them as a csv line
        return `${productId};${productPrice}`
    })

    // Join all lines into one file
    return csvLines.join("\n");

});
这段带有链接HTML结构的代码生成以下内容:

项目1055688$16.59
项目1055688$16.59
项目1055688$16.59
项目1055688$16.59


使用箭头函数重写它的更简洁的方法如下(尽管我不认为它可读性很强)


是否可以将这两个值分成两列A和B?还是在excel中加载时必须将自己分离?另外,如何将这些数据发送到csv文件?它们现在不在单独的列中吗?你说过要创建csv,这看起来像是一个吗?哦,我能从数字中删除“项目”这个词吗?我需要收集大约200个SKU,因此我还试图找出如何获取所有价值。查询选择器似乎只找到这个单一值,但每个项目/价格的格式与上面相同。是的,它看起来像一个csv文件,但在运行此代码后,我无法找到任何新创建的csv。很抱歉,如果这些问题看起来很基本,但我对木偶戏和网络游戏一般来说是新手。当然,你可以删除“item”这个词,使用.replace()方法。如果查询只找到一个项目,则显示完整的html结构(您可以告诉url)。要将数据写入文件,请使用node.js“fs”模块,有很多教程。
// Find product descriptions
const csv = await page.$$eval('.product_desc_txt', function(products){

    // Iterate over product descriptions
    let csvLines = products.map(function(product){

        // Inside of each product find product SKU and its price
        let productId = product.querySelector(".custom-body-copy").innerText.trim();
        let productPrice = product.querySelector("span[data-wishlist-linkfee]").innerText.trim();

        // Fomrat them as a csv line
        return `${productId};${productPrice}`
    })

    // Join all lines into one file
    return csvLines.join("\n");

});
const csv = await page.$$eval('.product_desc_txt', products => products.map(product => product.querySelector(".custom-body-copy").innerText.trim() + ";" + product.querySelector("span[data-wishlist-linkfee]").innerText.trim()).join("\n"));