闽公网安备 35020302035485号
const Nightmare = require('nightmare');
// 堆代码 duidaima.com
(async () => {
const nightmare = Nightmare();
await nightmare
.goto('https://www.example.com')
.evaluate(() => ({
title: document.title,
content: document.body.innerText
}))
.then(result => {
console.log('Title:', result.title);
console.log('Content:', result.content);
});
await nightmare.end();
})();
示例二:抓取列表项const Nightmare = require('nightmare');
(async () => {
const nightmare = Nightmare();
await nightmare
.goto('https://www.example.com/products')
.evaluate(() => {
const products = [];
const productElements = document.querySelectorAll('div.product');
productElements.forEach(element => {
products.push({
name: element.querySelector('h2').innerText,
price: element.querySelector('.price').innerText,
description: element.querySelector('p.description').innerText
});
});
return products;
})
.then(products => {
console.log(products);
});
await nightmare.end();
})();
示例三:处理分页const Nightmare = require('nightmare');
(async () => {
const nightmare = Nightmare();
let page = 1;
const maxPages = 5;
const allProducts = [];
while (page <= maxPages) {
const products = await nightmare
.goto(`https://www.example.com/products?page=${page}`)
.evaluate(() => {
const products = [];
const productElements = document.querySelectorAll('div.product');
productElements.forEach(element => {
products.push({
name: element.querySelector('h2').innerText,
price: element.querySelector('.price').innerText,
description: element.querySelector('p.description').innerText
});
});
return products;
});
allProducts.push(...products);
page++;
}
console.log(allProducts);
await nightmare.end();
})();
优点5.异步编程支持:Nightmare的API设计与现代异步编程模式(如Promises和async/await)兼容,使得管理复杂的抓取工作流更加容易。