如何用Node.js获取HTML元素特定值?以抓取网站用户数为例
使用Puppeteer抓取feds.lol网站用户数的实现步骤
没问题,用Puppeteer抓这个数据很简单,按下面步骤来就行:
1. 初始化项目并安装依赖
- 新建一个文件夹,打开终端执行
npm init -y快速初始化项目 - 安装Puppeteer:
npm install puppeteer(这个包会自动下载Chromium,要是想省空间可以装puppeteer-core,自己指定本地已有的浏览器)
2. 编写核心抓取代码
核心逻辑就是:启动浏览器→打开目标页面→定位到用户数元素→提取数据→清理资源。
首先得拿到用户数对应的元素选择器:打开https://feds.lol按F12调出开发者工具,找到显示用户数的那个嵌套div,右键它→复制→复制选择器(比如实际页面里可能是div.stats-container > div.user-stat > span.count,你要复制真实的选择器)。
创建一个scrape-user-count.js文件,写入以下代码:
const puppeteer = require('puppeteer'); async function getFedsUserCount() { // 启动浏览器,调试时可以把headless改成false,能看到浏览器操作过程 const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); try { // 打开目标页面,等待网络空闲确保页面加载完成 await page.goto('https://feds.lol', { waitUntil: 'networkidle2' }); // 替换成你从开发者工具复制的真实选择器 const userCountSelector = '替换成你的选择器'; // 等待元素加载,避免因页面未渲染完成找不到元素 await page.waitForSelector(userCountSelector); // 提取元素的文本内容 const rawText = await page.$eval(userCountSelector, el => el.textContent.trim()); // 处理文本(比如如果文本是"12345 位用户",就提取数字部分) const userCount = parseInt(rawText.replace(/[^0-9]/g, ''), 10); // 打印结果到控制台 console.log('当前网站用户数:', userCount || rawText); } catch (err) { console.error('抓取出错:', err); } finally { // 无论成功失败都关闭浏览器 await browser.close(); } } // 执行抓取函数 getFedsUserCount();
3. 运行代码
在终端执行 node scrape-user-count.js,就能看到控制台打印出用户数了。
注意点
- 选择器一定要准确,要是报错找不到元素,回去检查复制的选择器是否正确
- 如果页面加载慢,可以调整
page.goto的waitUntil参数,或者添加超时时间 - 后续要扩展功能的话,直接在当前代码基础上修改即可,比如把数据写入文件或者存数据库
内容的提问来源于stack exchange,提问作者PeanutDumplings
相关产品推荐
相关产品推荐

