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ế
- Khảo sát cấu trúc HTML của trang.
- Lấy nội dung với requests.
- Trích xuất dữ liệu với Beautiful Soup.
- 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.
