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
我尝试了其他我已经知道的方法,比如 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 ความคิดเห็น
我想抓取值,但是它的选择器是重复的,我不知道如何解决。
它会一直刮上面那个的值。
这里是我的代码:
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
我尝试了其他我已经知道的方法,比如 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 ความคิดเห็น