eBay, Amazon, Flipkart와 같은 주요 매장에서 실시간으로 제품 데이터를 쉽게 가져올 수 있는 전자상거래 플랫폼을 구축한다고 상상해 보세요. 물론, Shopify 및 유사한 서비스가 있지만 솔직하게 말하면 프로젝트에 대해서만 구독을 구매하는 것이 약간 번거로울 수 있습니다. 그래서 저는 이러한 사이트를 긁어내고 제품을 우리 데이터베이스에 직접 저장해 보는 것은 어떨까요? 이는 전자상거래 프로젝트에 필요한 제품을 얻는 효율적이고 비용 효율적인 방법이 될 것입니다.
웹 스크래핑에는 웹페이지의 HTML을 구문 분석하여 웹사이트에서 데이터를 추출하여 콘텐츠를 읽고 수집하는 작업이 포함됩니다. 여기에는 브라우저를 자동화하거나 사이트에 HTTP 요청을 보낸 다음 HTML 구조를 분석하여 텍스트, 링크 또는 이미지와 같은 특정 정보를 검색하는 작업이 포함되는 경우가 많습니다. Puppeteer는 웹사이트를 스크랩하는 데 사용되는 라이브러리 중 하나입니다.
Puppeteer는 Node.js 라이브러리입니다. 헤드리스 Chrome 또는 Chromium 브라우저를 제어하기 위한 고급 API를 제공합니다. 헤드리스 Chrome은 UI 없이 모든 것을 실행하는 Chrome 버전입니다(백그라운드에서 실행하기에 적합).
Puppeteer를 사용하여 다음과 같은 다양한 작업을 자동화할 수 있습니다.
먼저 라이브러리를 설치해야 합니다. 계속해서 이 작업을 수행하세요.
npm 사용:
npm i puppeteer # Downloads compatible Chrome during installation. npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
실 사용:
yarn add puppeteer // Downloads compatible Chrome during installation. yarn add puppeteer-core // Alternatively, install as a library, without downloading Chrome.
pnpm 사용:
pnpm add puppeteer # Downloads compatible Chrome during installation. pnpm add puppeteer-core # Alternatively, install as a library, without downloading Chrome.
다음은 웹사이트를 스크래핑하는 방법의 예입니다. (추신: 저는 이 코드를 사용하여 전자상거래 프로젝트를 위해 Myntra 웹사이트에서 제품을 검색했습니다.)
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;
?설명:
위 내용은 손쉬운 웹 스크래핑: Puppeteer를 사용하여 모든 HTML 페이지 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!