Những Mẹo Hữu Ích Dành Cho Dân Chuyên Web Scraping
Nếu bạn đam mê việc thu thập dữ liệu từ các trang web hay chỉ đơn giản là một người mới muốn khám phá lĩnh vực Web Scraping, bài viết này sẽ cung cấp cho bạn những thông tin và mẹo hữu ích để phục vụ cho sở thích cá nhân, kiếm tiền online hay tăng lượng traffic cho website của mình.
Web Scraping Là Gì?
Web scraping là quá trình tự động hóa việc thu thập dữ liệu từ các trang web bằng cách phân tích HTML và cấu trúc của chúng. Phương pháp này giúp bạn thu thập các thông tin quan trọng như văn bản, liên kết và hình ảnh từ trang web một cách hiệu quả hơn, tiết kiệm thời gian và công sức.
Puppeteer Là Gì?
Puppeteer là một thư viện Node.js mạnh mẽ cung cấp API cho phép bạn điều khiển trình duyệt Chrome hoặc Chromium mà không cần giao diện người dùng. Phiên bản Headless Chrome cho phép chạy mọi hoạt động mà không cần giao diện, điều này cực kỳ hữu ích cho nhiều tác vụ khác nhau như:
- Web Scraping: Trích xuất thông tin mà không cần phải tương tác thủ công với trình duyệt.
- Tạo PDF: Chuyển đổi các trang web thành định dạng PDF một cách dễ dàng.
- Kiểm tra tự động: Giúp tự động hóa kiểm tra website bằng cách mô phỏng hành động của người dùng như nhấp chuột, điền biểu mẫu.
Hướng Dẫn Bắt Đầu Với Web Scraping Sử Dụng Puppeteer
Cài Đặt Puppeteer
Để bắt đầu, trước hết bạn cần cài đặt thư viện Puppeteer theo các bước dưới đây:
- Sử dụng npm
bash
npm i puppeteer
npm i puppeteer-core
- Sử dụng yarn
bash
yarn add puppeteer
yarn add puppeteer-core
- Sử dụng pnpm
bash
pnpm add puppeteer
pnpm add puppeteer-core
Ví Dụ Về Web Scraping Với Puppeteer
Dưới đây là ví dụ về cách thu thập dữ liệu từ trang web Myntra. Đoạn mã này sẽ giúp bạn hiểu rõ cách làm:
javascript
const puppeteer = require("puppeteer");
const CategorySchema = require("./models/Category");
const scrape = async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('https://www.myntra.com/mens-sport-wear?rawQuery=mens%20sport%20wear', { waitUntil: 'domcontentloaded' });
await new Promise((resolve) => setTimeout(resolve, 25000));
const items = await page.evaluate(() => {
const elements = document.querySelectorAll('.product-base');
const elementsArray = Array.from(elements);
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,
available: 10,
ratings: Math.round((Math.random() * 5) * 10) / 10
};
});
return results;
});
await browser.close();
const data = {
category: "mens-sport-wear",
subcategory: "Mens",
list: items
};
const category = new CategorySchema(data);
console.log(category);
await category.save();
return items;
};
module.exports = scrape;
Phân Tích Mã Nguồn
Trong đoạn mã trên, chúng ta sử dụng Puppeteer để thu thập thông tin sản phẩm từ trang web Myntra. Sau khi xác định bộ CSS selectors cho các thông tin cần thiết, bạn có thể lưu trữ dữ liệu vào cơ sở dữ liệu của mình. Đây là một bước quan trọng nếu bạn dự định tích hợp thông tin sản phẩm vào cửa hàng trực tuyến.
Điều cần lưu ý là trước khi tiến hành thu thập, bạn nên hiểu rõ cấu trúc HTML của trang web và cách xác định các selectors đúng đắn để có thể trích xuất dữ liệu một cách chính xác nhất.
Hy vọng rằng bài viết này sẽ cung cấp cho bạn những thông tin cần thiết để bạn có thể bắt đầu với Puppeteer và web scraping một cách hiệu quả. Chúc bạn thành công trên con đường phát triển website của mình!
source: viblo