Web scraping thực chiến: thu thập và lưu dữ liệu

Sau khi nắm cơ bản về requests và Beautiful Soup, hãy áp dụng vào một dự án thực chiến: thu thập dữ liệu từ nhiều trang và lưu lại có cấu trúc.

Quy trình scraping thực tế

  1. Khảo sát cấu trúc HTML của trang.
  2. Lấy nội dung với requests.
  3. Trích xuất dữ liệu với Beautiful Soup.
  4. Lưu vào CSV hoặc database.

Thu thập và lưu CSV

import requests, csv, time
from bs4 import BeautifulSoup

ket_qua = []
for trang in range(1, 4):
    url = f"https://example.com/tin-tuc?page={trang}"
    soup = BeautifulSoup(requests.get(url, timeout=10).text, "html.parser")
    for bai in soup.select("article"):
        ket_qua.append({
            "tieu_de": bai.select_one("h2").text.strip(),
            "link": bai.select_one("a")["href"],
        })
    time.sleep(1)   # lịch sự với server

with open("tin_tuc.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["tieu_de", "link"])
    writer.writeheader()
    writer.writerows(ket_qua)

Xử lý lỗi bền bỉ

try:
    r = requests.get(url, timeout=10)
    r.raise_for_status()
except requests.RequestException:
    print(f"Bỏ qua trang lỗi: {url}")
    continue

Mẹo thực chiến

  • Đặt User-Agent để giống trình duyệt thật.
  • Thêm độ trễ giữa các request.
  • Lưu tiến độ để không mất dữ liệu khi gián đoạn.

Nhắc lại về trách nhiệm

Luôn kiểm tra robots.txt và điều khoản sử dụng. Chỉ thu thập dữ liệu công khai, không gây quá tải server, và không lấy dữ liệu cá nhân trái phép. Scraping có đạo đức mới bền vững.

Lên đầu trang