
本文旨在解决在使用 Puppeteer 抓取网页数据时,遇到返回空数组的问题。通过分析常见原因,并提供优化后的代码示例,帮助开发者更有效地抓取目标网站的数据,并避免抓取结果为空的情况。本文将重点关注选择器优化、页面元素加载以及数据提取等关键环节。
在使用 Puppeteer 进行网页数据抓取时,返回空数组通常有以下几个原因:
针对以上问题,可以采取以下措施:
以下是一个优化后的 Puppeteer 代码示例,用于抓取网页上的婴儿名字和含义。
const puppeteer = require("puppeteer");
const express = require("express");
const cors = require("cors");
const app = express();
app.use(cors());
let data = [];
(async () => {
const browser = await puppeteer.launch({
headless: true,
defaultViewport: null,
});
const page = await browser.newPage();
for (let pageNumber = 1; pageNumber <= 42; pageNumber++) {
await page.goto(`https://naamhinaam.com/baby-girl-names-a?page=${pageNumber}`);
await page.waitForTimeout(3000);
// 使用更精确的选择器
let nameElements = await page.$$(`a.nsg__name`);
let meaningElements = await page.$$(`div.nsg__meaning > i`);
// 循环遍历元素
for (let i = 0; i < nameElements.length; i++) {
let fullName = "";
let name = await page.evaluate(el => el.textContent, nameElements[i]);
let meaning = await page.evaluate(el => el.textContent, meaningElements[i]);
fullName = `${name.split(/[\n\t]/).join('').trim()}, ${meaning}`;
data.push({ fullName });
}
}
console.log(data);
await browser.close();
})();
app.get("/", (req, res) => {
res.status(200).json(data);
});
app.listen(3000, () => {
console.log("App is running...");
});代码解释:
通过优化选择器、等待页面加载、处理动态内容、检查元素是否存在以及优化循环逻辑等措施,可以有效解决 Puppeteer 抓取网页数据返回空数组的问题。在实际应用中,需要根据具体情况进行调整和优化,才能获得理想的抓取效果。
以上就是使用 Puppeteer 抓取网页数据返回空数组问题的解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号