Cách Scrape Trang Web Phiên Bản Đầu Tiên - Hướng Dẫn Mã Ví Dụ

By hientd, at: 14:10 Ngày 08 tháng 11 năm 2024

Thời gian đọc ước tính: __READING_TIME__ minutes

How to Scrape The First Edition site - A Sample Code Walkthrough
How to Scrape The First Edition site - A Sample Code Walkthrough

Cách Scrape https://thefirstedition.com – Hướng dẫn ví dụ qua mã code

Scrape dữ liệu từ các trang web thường là một kỹ năng hữu ích, cho dù bạn đang thu thập dữ liệu để nghiên cứu, tạo ra một tập hợp các danh sách, hay xây dựng một sản phẩm dựa trên web. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách scrape sách được liệt kê trên The First Edition, một trang web có danh mục sách hiếm phong phú. Chúng tôi sẽ hướng dẫn bạn qua một phương pháp giải quyết vấn đề để thu thập thông tin như SKU, tiêu đề, tác giả, giá cả, phiên bản, mô tả, địa điểm, ngày xuất bản và ISBN.

 

1. Một vấn đề ví dụ

Mục tiêu của chúng ta là thu thập thông tin sách từ The First Edition. Chúng ta sẽ nhắm mục tiêu trích xuất các chi tiết cần thiết như SKU, tiêu đề, tác giả, giá cả, phiên bản, mô tả, địa điểm, ngày xuất bản và ISBN cho mỗi cuốn sách. Hãy tưởng tượng một kịch bản mà chúng ta cần dữ liệu này để phân tích hoặc để hiển thị dữ liệu sách trong một ứng dụng.

Đầu ra ví dụ của một cuốn sách có thể trông như thế này

{
  "sku": "12345",
  "title": "To Kill a Mockingbird",
  "author": "Harper Lee",
  "price": "$1,250.00",
  "edition": "First Edition",
  "description": "Một ấn bản đầu tiên hiếm hoi của 'To Kill a Mockingbird' của Harper Lee với bìa bụi gốc.",
  "location": "New York, USA",
  "date_published": "1960",
  "isbn": "978-0-06-112008-4"
}

 

2. Phân tích vấn đề và xây dựng các bước giải pháp

Khi tiếp cận một nhiệm vụ scrape web, việc phân chia vấn đề là rất quan trọng. Dưới đây là các bước chúng ta sẽ làm theo:

  1. Xác định dữ liệu: Xem cấu trúc trang web để tìm các phần tử chính xác chứa dữ liệu cần thiết.
     
  2. Hiểu về phân trang: Hầu hết các trang thương mại điện tử đều có nhiều trang danh sách. Chúng ta cần tìm ra cách điều hướng qua các trang này.
     
  3. Cấu trúc trình scrape: Xây dựng một hàm để trích xuất dữ liệu từ một trang sách đơn lẻ, sau đó mở rộng nó để scrape dữ liệu trên nhiều sách và trang.
     
  4. Biên dịch dữ liệu: Lưu trữ dữ liệu đã scrape ở định dạng có cấu trúc (ví dụ: CSV) để phân tích thêm.
     

3. Thực hiện giải pháp


Bước 1: Nhập các thư viện cần thiết và thiết lập tiêu đề

Để bắt chước một lượt truy cập trình duyệt của con người, chúng ta sẽ sử dụng tiêu đề HTTP trong các yêu cầu của mình.

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

# URL gốc của trang web
base_url = "https://thefirstedition.com"

# Tiêu đề để bắt chước lượt truy cập trình duyệt
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

 

Bước 2: Định nghĩa các hàm để xử lý phân trang

Chúng ta cần tìm tổng số trang trong mỗi danh mục để trình scrape của chúng ta biết khi nào nên dừng lại.

def get_total_pages(category_url):
    response = requests.get(category_url, headers=headers)
    soup = BeautifulSoup(response.content, "html.parser")
    # Tìm phần tử phân trang và trích xuất tổng số trang
    pagination = soup.find("nav", class_="woocommerce-pagination")
    if pagination:
        pages = pagination.find_all("a")
        if pages:
            last_page = pages[-2].get_text()
            return int(last_page)
    return 

 

Bước 3: Trích xuất chi tiết sách

Mỗi trang sách chứa các phần tử cụ thể chứa các chi tiết như SKU, tiêu đề, tác giả, giá cả và mô tả. Dưới đây là cách để truy xuất các phần tử này:

def extract_book_details(book_url):
    response = requests.get(book_url, headers=headers)
    soup = BeautifulSoup(response.content, "html.parser")
    details = {}
    # Trích xuất SKU
    sku = soup.find("span", class_="sku")
    details["SKU"] = sku.get_text(strip=True) if sku else None
    # Trích xuất tiêu đề
    title = soup.find("h1", class_="product_title")
    details["Title"] = title.get_text(strip=True) if title else None
    # Trích xuất giá cả
    price = soup.find("p", class_="price")
    details["Price"] = price.get_text(strip=True) if price else None
    # Trích xuất mô tả
    description = soup.find("div", class_="woocommerce-product-details__short-description")
    details["Description"] = description.get_text(strip=True) if description else None
    return details

 

Bước 4: Scrape nhiều trang trong một danh mục

Để lặp lại các trang trong một danh mục và thu thập dữ liệu, chúng ta sẽ sử dụng một hàm phân trang.

def scrape_category(category_url):
    books = []
    total_pages = get_total_pages(category_url)
    for page in range(1, total_pages + 1):
        print(f"Scraping page {page} of {total_pages} in category {category_url}")
        page_url = f"{category_url}/page/{page}/"
        response = requests.get(page_url, headers=headers)
        soup = BeautifulSoup(response.content, "html.parser")
        # Tìm tất cả các liên kết sách trên trang
        book_links = soup.find_all("a", class_="woocommerce-LoopProduct-link")
        for link in book_links:
            book_url = link.get("href")
            print(f"Scraping book: {book_url}")
            book_details = extract_book_details(book_url)
            books.append(book_details)
            time.sleep(1)  # Trì hoãn để tránh làm quá tải máy chủ
    return books

 

4. Ghép tất cả lại với nhau và trình diễn một liên kết danh mục

Bây giờ chúng ta có thể áp dụng trình scrape của mình vào một danh mục và lưu đầu ra vào một tệp CSV:

# Chọn một danh mục để scrape
category_url = "https://thefirstedition.com/product-category/literature-classics/"

# Scrape danh mục đã chọn
books_data = scrape_category(category_url)

# Chuyển đổi danh sách sách thành một DataFrame
df = pd.DataFrame(books_data)

# Lưu vào CSV
df.to_csv("the_first_edition_books.csv", index=False)
print("Scraping completed. Data saved to 'the_first_edition_books.csv'")

 

Chạy mã trên, và bạn sẽ thu thập các chi tiết đã chỉ định cho mỗi cuốn sách trong danh mục đã chọn, được lưu trong the_first_edition_books.csv.

Đoạn mã đầy đủ được lưu trữ ở đây

 

5. Bài học kinh nghiệm

 

  • Scrape có trách nhiệm: Điều cần thiết là phải có trách nhiệm khi scrape. Luôn thêm độ trễ giữa các yêu cầu để tránh làm quá tải máy chủ. Hãy chắc chắn làm theo các hướng dẫn robots.txt của trang web.
     
  • Xử lý lỗi: Không phải tất cả các trang đều có cấu trúc giống nhau. Khi xây dựng các trình scrape, hãy thêm các kiểm tra để xử lý các trường bị thiếu hoặc bố cục không mong muốn.
     
  • Logic phân trang: Điều hướng nội dung nhiều trang là rất quan trọng để thu thập dữ liệu toàn diện. Hãy kiểm tra logic phân trang của bạn một cách cẩn thận để đảm bảo tất cả các mục đều được thu thập.
     
  • Cấu trúc dữ liệu: Sắp xếp dữ liệu đã scrape một cách có ý nghĩa. Sử dụng một định dạng có cấu trúc như CSV hoặc cơ sở dữ liệu sẽ giúp dễ dàng phân tích hoặc sử dụng dữ liệu sau này.
     

Hướng dẫn này cho thấy cách phân chia và giải quyết một vấn đề scrape web một cách hiệu quả, giúp bạn có được cả dữ liệu có cấu trúc và hiểu biết về việc xây dựng các trình scrape web. Chúc bạn scrape vui vẻ!

Hướng dẫn tiếp theo: Chúng ta chỉ đề cập đến cách scrape danh sách liên kết sách từ liên kết danh mục và chi tiết sách từ liên kết sách. Tuy nhiên, chúng ta chưa đề cập đến "cách lấy danh sách liên kết danh mục từ trang web" - Bạn có thể thử xem sao

Tag list:
- web scraping for book data
- python requests beautiflsoup
- rare books data scraping
- scraping SKU Python
- python data collection
- python crawler
- scrape The First Edition books
- python scraping
- requests library scraping
- web scraping tutorial
- Python scraping guide

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.