📅  最后修改于: 2023-12-03 15:36:33.273000             🧑  作者: Mango
Puppeteer 是一个 Node.js 库,它提供了一个高级 API 来控制 Chrome 或 Chromium。通过使用 Puppeteer,我们可以模拟用户在浏览器中的操作,如点击、滚动、输入等,以及从网页中抓取数据。
在本文中,我们将介绍如何使用 Puppeteer 从亚马逊网站上抓取商品信息,包括商品名称、价格、评论数等。
首先,我们需要安装 Puppeteer。可以通过以下命令在终端中进行安装:
npm install puppeteer
接下来,我们需要在 Puppeteer 中打开亚马逊网站。可以使用以下代码:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.amazon.com/');
// 在这里进行后续操作
await browser.close();
})();
在上面的代码中,我们使用 await
等待浏览器启动并打开页面。browser.newPage()
会创建一个新页面对象,通过 page.goto()
可以访问指定的页面。
一旦我们打开了亚马逊网站,我们可以开始抓取商品信息了。下面展示了如何获取商品名称、价格和评论数:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.amazon.com/');
// 等待页面加载完成
await page.waitForSelector('#twotabsearchtextbox');
// 在搜索框中输入关键词
await page.type('#twotabsearchtextbox', 'laptop');
// 点击搜索按钮
await page.click('#nav-search-submit-button');
// 等待页面加载完成
await page.waitForSelector('.s-result-item');
// 获取商品列表
const items = await page.$$('.s-result-item');
for(let item of items) {
// 获取商品名称
const title = await item.$eval('.a-link-normal', node => node.innerText);
// 获取商品价格
const price = await item.$eval('.a-price-whole', node => node.innerText);
// 获取评论数
const ratingCount = await item.$eval('.s-item-rating', node => {
const rating = node.getAttribute('aria-label');
return rating ? rating.replace(/[^0-9]/g, '') : 0;
});
console.log({
title,
price,
ratingCount
});
}
await browser.close();
})();
在上述代码中,我们首先使用 page.waitForSelector()
等待搜索框加载完成,然后使用 page.type()
在搜索框中输入关键词,使用 page.click()
点击搜索按钮。接着,使用 page.waitForSelector()
等待商品列表加载完毕,使用 page.$$()
获取商品列表。然后,遍历商品列表,通过 item.$eval()
获取商品名称、价格和评论数,存储在对象中并输出到控制台。
通过使用 Puppeteer,我们可以方便地从网页中抓取数据。比如,我们可以使用 Puppeteer 从亚马逊网站上抓取商品信息。在这篇文章中,我们介绍了如何使用 Puppeteer 打开网页、输入关键词、点击搜索按钮、获取商品列表以及从商品列表中获取商品名称、价格和评论数。