Node.js 如何提取标签innerText中的整数数据?
从页面文本中提取整数(Puppeteer场景)
你通过innerText获取页面标签文本后,想要从中提取整数类型数据,可以用以下几种方法实现,结合你的Puppeteer代码示例修改如下:
你的原始代码(供参考)
const scraperObject = { url: 'https://stockx.com/fr-fr/dior-b713-cactus-jack-mocha', async scraper(browser){ let page = await browser.newPage(); console.log(`Navigating to ${this.url}...`); await page.goto(this.url); await page.waitForSelector('#onetrust-reject-all-handler'); await page.click('#onetrust-reject-all-handler'); const result = await page.evaluate(() => { let demandes = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > div > a.chakra-button.css-2zzyy5 > p').innerText; let offres = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > a > p').innerText; return {demandes, offres} }) console.log(result); browser.close() return result } }
解决方案:提取整数的几种方式
1. 基础正则提取(适用于无千位分隔符的整数)
用正则表达式匹配文本中的数字序列,再转换为整数。直接在page.evaluate里处理:
const result = await page.evaluate(() => { // 提取单个整数的工具函数 const extractInt = (text) => { const match = text.match(/\d+/); // 匹配第一个连续数字序列 return match ? parseInt(match[0], 10) : null; // 转成整数,无匹配则返回null } let demandesText = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > div > a.chakra-button.css-2zzyy5 > p').innerText; let offresText = document.querySelector('#main-content > div > section:nth-child(3) > div.css-gg4vpm > div.css-0 > div.css-qt7qal > div.chakra-stack.css-1g42e87 > a > p').innerText; return { demandes: extractInt(demandesText), offres: extractInt(offresText) } })
2. 处理带千位分隔符的整数
如果文本里的数字是类似1,234这种带逗号分隔的格式,先清除分隔符再提取:
const extractInt = (text) => { const cleanedText = text.replace(/,/g, ''); // 去掉所有逗号 const match = cleanedText.match(/\d+/); return match ? parseInt(match[0], 10) : null; }
3. 提取所有整数(如果文本中有多个数字)
如果需要提取文本里的所有整数,用全局匹配获取数组后逐个转换:
const extractAllInts = (text) => { const matches = text.match(/\d+/g); return matches ? matches.map(num => parseInt(num, 10)) : []; }
注意事项
- 若需要提取小数,可把
parseInt换成parseFloat - 若页面元素可能不存在,建议给
querySelector添加判断逻辑,避免抛出错误
内容的提问来源于stack exchange,提问作者Warrencky
相关产品推荐
相关产品推荐

