Vì sao crawl lung tung là lãng phí. Frame câu hỏi đúng
Khoá này khác các tutorial Selenium thông thường
90% người mới học crawl đều sai một thứ giống nhau: họ chạy code trước khi nghĩ. Họ thấy 1 trang sản phẩm, mở DevTools, viết script cào hết tên + giá + ảnh, chạy xong rồi mới hỏi: "ờ giờ làm gì với 50,000 dòng dữ liệu này?"
Hậu quả: data thừa, IP bị block sớm, file CSV nặng GB nhưng không trả lời được câu hỏi nào hữu ích. Đây là tư duy tool-first thay vì question-first.
Một học viên cũ kể: anh ta nhận job crawl 100k sản phẩm Shopee, làm cật lực 3 ngày, gửi file CSV 800MB. Client mở ra... và trả lại. Lý do: "Tôi cần biết giá đối thủ trong tháng vừa rồi tăng giảm thế nào — không phải snapshot 1 thời điểm."
Vấn đề không nằm ở code. Vấn đề nằm ở không hỏi rõ trước khi làm. Nếu hỏi trước, anh ta sẽ biết phải crawl daily snapshot, lưu lịch sử giá — và làm 1/10 công việc nhưng đúng yêu cầu.
"Mình biết Selenium — crawl thử xem có gì hay" → ra mớ data vô dụng.
"Mình cần biết giá iPhone 15 Pro Max của 5 cửa hàng top mỗi ngày" → biết chính xác phải làm gì.
Template 4 câu hỏi tôi luôn dùng trước khi nhận job crawl
Mỗi khi có job crawl mới, tôi luôn ngồi xuống trả lời 4 câu hỏi này. Mất 15 phút, nhưng tiết kiệm hàng giờ debug. Bạn có thể copy template ra Notion/giấy:
# Crawl Brief — 4 câu hỏi vàng 1. WHAT — Mình cần TRẢ LỜI câu hỏi gì? (vd: giá iPhone của top 5 shop trong tuần qua tăng/giảm bao nhiêu) 2. SOURCE — Site nào trả lời được câu hỏi đó? (vd: Shopee + TGDD + CellphoneS — KHÔNG phải toàn bộ Shopee) 3. FIELDS — Fields nào CẦN, fields nào không? (vd: cần price, shop_name, timestamp; KHÔNG cần review, image) 4. FREQ — Tần suất cào: 1 lần / hàng ngày / real-time? (vd: 1 lần/ngày lúc 9h sáng — vì giá ít đổi nhiều lần/ngày)
So sánh 2 brief sau, dù cùng 1 yêu cầu mơ hồ ban đầu là "crawl Shopee":
"Crawl tất cả sản phẩm điện thoại trên Shopee" → kết quả: 200k rows, không biết phân tích thế nào, IP block giữa chừng, mất 2 ngày.
"Mỗi ngày 9h sáng, crawl giá + tồn kho của top 50 sản phẩm 'iPhone 15' theo lượt bán, lưu lịch sử 30 ngày để vẽ biểu đồ biến động giá" → 50 rows/ngày, 1500 rows tổng, đủ để ra insight.
Một trang web có hàng chục entry-points — chọn đúng tiết kiệm 80% effort
Cùng 1 sản phẩm trên Shopee, bạn có thể tiếp cận data từ nhiều con đường: trang search, category, shop, product detail, hoặc API ẩn (XHR). Mỗi con đường có effort và data khác nhau.
Ưu: nhiều sản phẩm/page, dễ paginate. Nhược: data ngắn (chỉ tên + giá + bán), không có chi tiết.
Ưu: đủ field. Nhược: chậm — phải request từng URL một.
Ưu: JSON sạch, nhanh nhất. Nhược: phải reverse-engineer header + signature, dễ bị block.
Ưu: URL đầy đủ, official. Nhược: chỉ có URL, phải request từng cái để lấy data.
Mở trang web bạn muốn crawl → F12 → tab Network → filter "Fetch/XHR" → reload trang → click các request, tìm cái nào trả về JSON với data bạn cần. Đó là API ẩn.
# Trong tab Network của Chrome DevTools: 1. Filter: "Fetch/XHR" 2. Cmd/Ctrl+R reload trang 3. Sort by Size (DESC) — request lớn nhất thường là API data 4. Click → tab Preview → tìm JSON với cấu trúc data bạn cần 5. Right-click request → Copy → Copy as cURL 6. Paste vào Postman hoặc convert sang Python requests
Áp dụng framework — từ câu hỏi tới kết quả
Giả sử client là chủ shop điện thoại, cần biết: "Giá iPhone 15 Pro Max bên đối thủ tăng/giảm tuần qua như nào, để mình điều chỉnh giá?". Áp dụng 4 câu hỏi:
Trend giá 7 ngày qua + giá min/max/median + tốp shop nào đang phá giá nhất.
Shopee (đại diện thị trường online VN). Page: search "iPhone 15 Pro Max" sort by "Bán chạy" — top 30 kết quả.
product_id, product_name, price, shop_name, timestamp. Bỏ qua image, review, description — không cần cho phân tích giá.
1 lần/ngày, 9h sáng. Giá Shopee không đổi liên tục trong ngày, không cần real-time.
Sau 7 ngày crawl, bạn có file CSV ~210 dòng (30 sản phẩm × 7 ngày), cực dễ phân tích trong Excel/Pandas. Tạo pivot table → ra ngay biểu đồ biến động giá. Client happy, bạn không bị block IP, mọi người win.
3 câu — không có gì sâu, chỉ cần nắm tư duy
Đây là phần quan trọng nhất của khoá. Code có thể học sau, nhưng tư duy question-first này là thứ phân biệt freelancer giỏi và freelancer làm thuê. Bài 2: "Pháp lý, robots.txt, đạo đức crawl".