node js puppeteer 如何从重复的选择器中抓取值?

node js puppeteer How do I scrape values ​from duplicate selector?

我想抓取值,但是它的选择器是重复的,我不知道如何解决。

它会一直刮上面那个的值。

这里是我的代码:

const puppeteer = require('puppeteer')

async function scrape() {    const browser = await puppeteer.launch({})    const page = await browser.newPage()

   await page.goto('https://pantip.com/topic/34497907')    var element
= await page.waitForSelector("#comment-counter")    var text = await page.evaluate(element => element.textContent, element)    console.log(text)    browser.close() } scrape()

这是我要抓取的部分。

enter image description here

这是重复的,上面我不需要它。

enter image description here

the web I scraped

我尝试了其他我已经知道的方法,比如 xpath,但它不起作用,因为我将抓取的部分写在 ajax 我知道并且现在有效的唯一方法是使用它,如果有的话另一个更好的方法和关于 node js 请推荐我:)

我针对你的问题写了几个解决方案。首先是获取一个数组,其中包含我们要查找的所有选择器的内容:

const puppeteer = require("puppeteer");

async function scrape() {
  const browser = await puppeteer.launch({});
  const page = await browser.newPage();

  await page.goto("https://pantip.com/topic/34497907");
  await page.waitForSelector("#comment-counter");

  const text = await page.evaluate(() => {
    return Array.from(document.querySelectorAll("#comment-counter")).map((el) => el.textContent.trim());
  });
  console.log(text);
  browser.close();
}
scrape();

输出:

[ 'สุดยอดความคิดเห็น', '169 ความคิดเห็น' ]

而在第二个选项中,您可以使用一系列选择器,以便您要查找的选择器是唯一的:

const puppeteer = require("puppeteer");

async function scrape() {
  const browser = await puppeteer.launch({});
  const page = await browser.newPage();

  await page.goto("https://pantip.com/topic/34497907");
  await page.waitForSelector("#comment-counter");

  const text = await page.$eval("#comments-counts #comment-counter", (el) => el.textContent);
  console.log(text);
  browser.close();
}
scrape();

输出:

169 ความคิดเห็น