⚡ All ⏱ 30 phút 🎯 Bài 1/7

Mindset crawl: hỏi đúng trước khi cào

Vì sao crawl lung tung là lãng phí. Frame câu hỏi đúng

B

Đào Thái Bảo · ekkoinc

Cập nhật: tháng 5, 2026 · Cần Thơ, VN

Nội dung bài học
1

Vì sao "crawl tất cả" là tư duy sai

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.

Câu chuyện thật: client trả lại job

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.

💡
Nguyên tắc số 1 Crawl ít, đúng > Crawl nhiều, không dùng được. Mọi cú click chuột vào "Run" đều phải có 1 câu hỏi rõ ràng đứng sau nó.

Tool-first (sai)

"Mình biết Selenium — crawl thử xem có gì hay" → ra mớ data vô dụng.

Question-first (đú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ì.

2

Frame câu hỏi trước khi viết code

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:

framework.md
# 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)

Ví dụ áp dụng — tốt vs xấu

So sánh 2 brief sau, dù cùng 1 yêu cầu mơ hồ ban đầu là "crawl Shopee":

😰

Brief mờ ám

"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.

🎯

Brief sắc bén

"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ẹo: Hỏi ngược client Khi nhận job, đừng gật đầu ngay. Hỏi: "Anh sẽ DÙNG data này để LÀM GÌ?" — câu trả lời sẽ giúp bạn bóc tách scope thật. 70% client sẽ nói "à thật ra tôi chỉ cần 5 sản phẩm thôi" sau khi bị hỏi ngược.
3

Chọn nguồn: site nào, page nào, field nào

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.

4 entry-points phổ biến — đánh giá

1

Trang search/category (HTML)

Ư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.

2

Trang chi tiết sản phẩm (HTML)

Ưu: đủ field. Nhược: chậm — phải request từng URL một.

3

API ẩn (XHR/Fetch trong DevTools)

Ưu: JSON sạch, nhanh nhất. Nhược: phải reverse-engineer header + signature, dễ bị block.

4

Sitemap.xml / RSS feed

Ưu: URL đầy đủ, official. Nhược: chỉ có URL, phải request từng cái để lấy data.

🔍
Quy tắc chọn entry-point Luôn thử theo thứ tự: API ẩn → Sitemap → Search/Category → Product detail. API ẩn nhanh nhất nhưng dễ block — nếu khó thì xuống cấp.

Cách tìm API ẩn trong 30 giây

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.

devtools-tip
# 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
4

Case study: phân tích giá iPhone trên Shopee

Á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:

1

WHAT — Câu hỏi cần trả lời

Trend giá 7 ngày qua + giá min/max/median + tốp shop nào đang phá giá nhất.

2

SOURCE — Chọn site & page

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ả.

3

FIELDS — Chỉ cần 5 field

product_id, product_name, price, shop_name, timestamp. Bỏ qua image, review, description — không cần cho phân tích giá.

4

FREQ — Tần suất phù hợp

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.

Kết quả: 1 query CSV nhỏ gọn

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.

Trade-off đẹp Nếu cào tất cả iPhone trên Shopee: 50,000 rows, chậm, dễ block, hard to analyze. Cào theo brief sắc: 210 rows, nhanh, an toàn, ra insight ngay. Cùng 1 question, 99% effort khác nhau.
⚠️
Cảnh báo: đừng skip framework Khi đã code quen, bạn sẽ bị cám dỗ bỏ qua bước "frame câu hỏi" để code luôn cho nhanh. Đó là khi bạn sẽ làm sai. 4 câu hỏi mất 15 phút, debug và làm lại có thể mất 15 giờ.
5

Kiểm tra mindset

3 câu — không có gì sâu, chỉ cần nắm tư duy

⚡ Câu hỏi 1
Khi nhận yêu cầu "crawl Shopee" từ client, bước ĐẦU TIÊN bạn nên làm là gì?
⚡ Câu hỏi 2
Trong 4 entry-points để crawl, cái nào nhanh nhất nhưng dễ bị block nhất?
⚡ Câu hỏi 3
Bạn cần phân tích biến động giá trong tuần. Tần suất crawl phù hợp nhất là?
🧠

Bạn đã có mindset!

Đâ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".

5
Phần đã học
0/3
Quiz đúng
30
Phút đầu tư