Imaginez créer une plate-forme de commerce électronique sur laquelle nous pouvons facilement récupérer des données sur les produits en temps réel auprès de grands magasins comme eBay, Amazon et Flipkart. Bien sûr, il existe Shopify et des services similaires, mais soyons honnêtes : il peut sembler un peu fastidieux d'acheter un abonnement uniquement pour un projet. Alors, je me suis dit, pourquoi ne pas gratter ces sites et stocker les produits directement dans notre base de données ? Ce serait un moyen efficace et rentable d'obtenir des produits pour nos projets de commerce électronique.
Le Web scraping consiste à extraire des données de sites Web en analysant le HTML des pages Web pour lire et collecter du contenu. Cela implique souvent d'automatiser un navigateur ou d'envoyer des requêtes HTTP au site, puis d'analyser la structure HTML pour récupérer des informations spécifiques telles que du texte, des liens ou des images. Puppeteer est une bibliothèque utilisée pour gratter les sites Web.
Puppeteer est une bibliothèque Node.js. Elle fournit une API de haut niveau pour contrôler les navigateurs Chrome ou Chromium sans tête. Headless Chrome est une version de Chrome qui exécute tout sans interface utilisateur (parfait pour exécuter des choses en arrière-plan).
Nous pouvons automatiser diverses tâches à l'aide du marionnettiste, telles que :
Tout d'abord, nous devons installer la bibliothèque, allez-y et faites-le.
Utiliser npm :
npm i puppeteer # Downloads compatible Chrome during installation. npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
Utiliser du fil :
yarn add puppeteer // Downloads compatible Chrome during installation. yarn add puppeteer-core // Alternatively, install as a library, without downloading Chrome.
Utilisation de pnpm :
pnpm add puppeteer # Downloads compatible Chrome during installation. pnpm add puppeteer-core # Alternatively, install as a library, without downloading Chrome.
Voici un exemple de comment gratter un site Web. (P.S. J'ai utilisé ce code pour récupérer des produits du site Myntra pour mon projet e-commerce.)
const puppeteer = require("puppeteer"); const CategorySchema = require("./models/Category"); // Define the scrape function as a named async function const scrape = async () => { // Launch a new browser instance const browser = await puppeteer.launch({ headless: false }); // Open a new page const page = await browser.newPage(); // Navigate to the target URL and wait until the DOM is fully loaded await page.goto('https://www.myntra.com/mens-sport-wear?rawQuery=mens%20sport%20wear', { waitUntil: 'domcontentloaded' }); // Wait for additional time to ensure all content is loaded await new Promise((resolve) => setTimeout(resolve, 25000)); // Extract product details from the page const items = await page.evaluate(() => { // Select all product elements const elements = document.querySelectorAll('.product-base'); const elementsArray = Array.from(elements); // Map each element to an object with the desired properties const results = elementsArray.map((element) => { const image = element.querySelector(".product-imageSliderContainer img")?.getAttribute("src"); return { image: image ?? null, brand: element.querySelector(".product-brand")?.textContent, title: element.querySelector(".product-product")?.textContent, discountPrice: element.querySelector(".product-price .product-discountedPrice")?.textContent, actualPrice: element.querySelector(".product-price .product-strike")?.textContent, discountPercentage: element.querySelector(".product-price .product-discountPercentage")?.textContent?.split(' ')[0]?.slice(1, -1), total: 20, // Placeholder value, adjust as needed available: 10, // Placeholder value, adjust as needed ratings: Math.round((Math.random() * 5) * 10) / 10 // Random rating for demonstration }; }); return results; // Return the list of product details }); // Close the browser await browser.close(); // Prepare the data for saving const data = { category: "mens-sport-wear", subcategory: "Mens", list: items }; // Create a new Category document and save it to the database // Since we want to store product information in our e-commerce store, we use a schema and save it to the database. // If you don't need to save the data, you can omit this step. const category = new CategorySchema(data); console.log(category); await category.save(); // Return the scraped items return items; }; // Export the scrape function as the default export module.exports = scrape;
?Explication :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!