Giai đoạn: 20/07 (chiều) – 27/07/2026 · Tổng hợp từ lịch sử Git, thư mục làm việc chưa commit, các bản thiết kế/QC và số liệu vận hành truy vấn trực tiếp từ DB
Người thực hiện: jc-hello
Ngày lập: 27/07/2026
Phạm vi: 3 dự án
Tổng quan tuần
Tuần này có ba trục — và trục nào cũng là bước mở rộng quy mô dữ liệu chứ không chỉ vá lỗi:
chicgo_data — mở crawl ra 4 tỉnh mới & chốt chất lượng bản phát hành. Dựng cơ chế cho nhiều crawler chạy song song không giẫm chân nhau để thêm Huế, Đà Nẵng, Quảng Ninh, Hải Phòng; engine nghiên cứu nội bộ (thay Perplexity) nay đã thành nguồn enrich chính; và chốt bản phát hành 3.048 địa điểm với báo cáo QC đạt hạng A−.
chicdata_dashboard — công cụ để tăng tốc & mở rộng đội BD. Thêm bảng phễu (funnel) đứng yên làm mốc theo dõi, và nhập cộng tác viên hàng loạt từ file Excel để onboard đội nhanh — đúng tuần đội confirm tăng vọt gấp ~4×.
chicstay-data — dựng đường ống dữ liệu OTA cho ChicStay. Dự án mới: giải mã xong quy trình lấy dữ liệu của 5 sàn đặt phòng (Traveloka, Booking, Agoda, Trip.com, Airbnb) và thiết kế mô hình dữ liệu chuẩn hoá cho nền tảng đặt phòng theo giờ & theo "gu".
5.244
địa điểm BD confirm trong tuần vận hành
9.914
địa điểm được enrich trong tuần
4
tỉnh/thành mới đưa vào crawl
5
sàn OTA đã giải mã cho ChicStay
Lưu ý về cách đọc báo cáo: khác với các tuần trước, phần lớn công việc tuần này chưa được commit — nằm ở thư mục làm việc, các nhánh riêng, hoặc trạng thái "code xong, chờ deploy". Vì vậy báo cáo lấy mốc theo kết quả & sản phẩm bàn giao (số liệu vận hành, bản phát hành, bản thiết kế đã verify) thay vì đếm số commit.
1. Số liệu vận hành — đội BD tăng tốc mạnh
Số liệu lấy trực tiếp từ DB ngày 27/07 (đã lọc địa điểm còn hiệu lực):
41.766
tổng địa điểm trong kho +9.073 tuần
18.536
đã enrich (đủ điều kiện confirm)
13.882
đã được BD confirm
75%
tiến độ confirm trên số đã enrich
Địa điểm BD confirm theo ngày:
30120/07
26721/07
25122/07
1.18923/07
1.27124/07
1.12125/07
52526/07
31927/07
Tổng tuần 5.244 địa điểm (trung bình ~655/ngày, so với ~431/ngày tuần trước). Ba ngày 23–25/07 tăng vọt lên ~1.100–1.270/ngày — gấp khoảng 4 lần đầu tuần.
Vì sao đột biến giữa tuần đáng chú ý: mức nhảy từ ~260 lên hơn 1.200 confirm/ngày trùng đúng thời điểm bật công cụ nhập cộng tác viên hàng loạt (mục 3.2) — nhiều khả năng là đội BD/CTV được onboard thêm và bảng phễu mới giúp phân việc rõ ràng. Nên xác nhận lại với đội nguyên nhân chính xác để biết mức ~1.200/ngày có duy trì được không, hay chỉ là đợt dọn tồn.
1.1 Nguồn enrich: engine nội bộ đã thành nguồn chính
Tuần trước engine nghiên cứu nội bộ mới ở chế độ bật thử tuỳ chọn, mặc định vẫn chạy Perplexity. Tuần này đã bật rộng: trong tổng số địa điểm đã enrich, chic_research (engine nội bộ) ~9.094 so với Perplexity chỉ 781 — engine tự làm chủ giờ đảm nhận phần lớn khối lượng.
Đã enrich trong tuần: 9.914 địa điểm (cao điểm 23/07: 3.485). Enrich tạm dừng 2 ngày 26–27/07 khi dồn lực cho crawl (26–27/07 tạo mới tới 3.060 và 2.127 địa điểm/ngày — chính là đợt đẩy crawl tỉnh mới).
2. chicgo_data — Mở rộng 4 tỉnh & chốt bản phát hành 3.048
Mục tiêu: mở rộng crawl ra 4 tỉnh mới bằng đúng bộ công thức từ khoá đang dùng cho HCM/HN, chạy trên một dịch vụ Railway riêng để không ảnh hưởng crawler HCM đang chạy.
Vấn đề gốc đã xử lý: cơ chế cô lập thành phố cũ dựa trên một khoá "tạm dừng toàn cục" — nếu bật crawler thứ hai, hai crawler sẽ giành/khoá hàng đợi của nhau làm lệch dữ liệu, nên trước đây không thể chạy song song an toàn.
Hàng đợi tách theo tỉnh — mỗi crawler chỉ nhận việc thuộc các quận/huyện của tỉnh nó phụ trách; bỏ khoá toàn cục. Nhờ đó HCM / HN / 4-tỉnh chạy song song trên cùng một bảng mà không đụng nhau.
Nhận việc trải đều 13 ngành — thay vì rút cạn một ngành mới sang ngành khác, mỗi lượt lấy dàn đều các danh mục.
Bộ từ khoá tĩnh thay cho gọi AI mỗi lần — ~195 từ khoá chung cho mọi tỉnh (≈15/ngành × 13 ngành), bỏ phụ thuộc tín dụng OpenRouter khi gieo từ khoá.
Đã verify cục bộ (chỉ đọc): kiểm tra hàng đợi lọc đúng theo tỉnh, không làm thay đổi dữ liệu.
Rủi ro khi deploy Crawler HCM đang chạy vẫn là code cũ có "khoá toàn cục". Bắt buộc redeploy crawler HCM sang code mới trước/cùng lúc với việc bật dịch vụ tỉnh — nếu không, khoá cũ của nó sẽ tạm dừng hàng đợi 4 tỉnh và lại làm lệch dữ liệu.
2.2 Bản phát hành 3.048 địa điểm & báo cáo QC hạng A− chốt dữ liệu
Từ bản 3.053 chạy thêm một vòng gộp trùng (theo khoảng cách ≤120m + so tên mờ) ra bản sạch 3.048 địa điểm / 32.910 đánh giá, kèm báo cáo QC dạng HTML tự sinh.
Tiêu chí QC
Kết quả
Ghi chú
Tên / địa chỉ / URL / toạ độ / danh mục
100%
Toạ độ đều nằm trong VN; 0 trùng ID, 0 trùng tên+địa chỉ
BD pass
3.034 / 3.048 (99,5%)
Điểm BD trung bình 85,7/100
Ảnh
48.091 (15,8/điểm)
Chỉ 3 điểm không ảnh; 0 URL còn trỏ về Google (đã lên R2)
Đánh giá đã dịch tiếng Việt
94,3%
Trên 32.910 đánh giá
Có giá
82,5%
Thiếu 534 (dồn ở concept store & spa/beauty)
Phát hiện QC cần xử lý: sau khi đổi nhà cung cấp nghiên cứu (bỏ Perplexity sang engine nội bộ), thang chấm điểm BD vẫn tính 0 điểm cho "nguồn nghiên cứu" trên toàn bộ dữ liệu — dù 2.926 địa điểm thực tế có nguồn. Cần cập nhật lại thang điểm để ghi nhận nguồn của engine mới. Ngoài ra các trường marketing (giới thiệu 8,2%, vibe/gợi ý vibe gần như trống) còn yếu.
2.3 Dọn dữ liệu & công cụ mới
Lưu trữ mềm địa điểm không tên — 90 địa điểm không tên được đưa vào kho lưu trữ (có thể khôi phục, ghi lại lý do/người/thời điểm); thêm hàm archive_places() đảo ngược được.
Chuẩn hoá link go2joy — cắt tham số thừa trên URL của 747 địa điểm (1.780 đánh giá), có snapshot để rollback.
Cổng kiểm soát enrich (enrich_gap_gate.py) — chỉ chạy enrich khi khoảng cách giữa "đã confirm" và "đã enrich" còn dưới ngưỡng, tránh enrich thừa.
Nhập bản phát hành thành bảng bất biến (import_release.py) — mỗi bản release lưu thành ảnh chụp cố định (releases / release_places) để tra cứu lại về sau.
Chống crawl "rỗng" — thêm cổng kiểm tra đủ dữ liệu: địa điểm thiếu ảnh/đánh giá sẽ kiểm tra có bị Google chặn/captcha không rồi crawl lại, thay vì lưu nhầm "0 đánh giá/0 ảnh".
Dịch đánh giá tiếng Việt ngay khi crawl, chèn cookie đồng ý & chặn tải ảnh/video nặng để crawl được từ VPS nước ngoài.
Trước đây chỉ có một con số "đã confirm X/Y" tính ở phía trình duyệt và thay đổi mỗi khi lọc tỉnh/danh mục — khó lấy làm mốc. Nay thay bằng ba con số cố định toàn hệ thống, đứng yên dù lọc gì bên dưới:
Đã enrich — số địa điểm đã qua bước làm giàu dữ liệu (cũng chính là tập hiện trong tab BD Confirm).
BD pass — số địa điểm BD đã bấm "Pass".
BD confirm — số địa điểm BD đã xác nhận.
Kết quả được cache 30 giây phía máy chủ nên nhẹ cho DB. Đã sửa lỗi đếm sai "BD pass": trước đây đếm theo một trường cũ không bao giờ mang giá trị "rejected" nên đếm dư (cái gì cũng thành "verified"); nay đếm đúng cột quyết định thủ công của BD.
3.2 Nhập cộng tác viên (CTV) hàng loạt từ Excel tăng tốc onboard đội
Vấn đề: CTV lâu nay phải thêm từng người một qua form, trong khi đội giữ sẵn một file Excel danh sách CTV (tên, Gmail, SĐT Zalo, số & tên ngân hàng, chủ tài khoản). Onboard theo đợt rất mất công.
Nhập cả file Excel một lần — tự nhận diện cột theo tên tiếng Việt có/không dấu ở bất kỳ thứ tự nào; chỉ bắt buộc email, tự bỏ dòng trùng/thiếu email và báo lý do.
Tự sinh mật khẩu cho mỗi tài khoản mới, lưu dạng mã hoá (đăng nhập được & xuất lại được), không ghi đè tài khoản đã có.
Bảng kết quả hiện số tạo mới / bỏ qua / lỗi và danh sách mật khẩu tạo ra (tải được CSV, hiển thị tiếng Việt đúng).
Có cả công cụ dòng lệnh chạy ngoài app cho cùng việc, và bộ kiểm thử cho phần đọc/khớp cột Excel. File chứa mật khẩu/PII đã được loại khỏi git.
3.3 Nền dữ liệu ChicStay trong dashboard backend
Dựng lớp API chỉ-đọc để đưa dữ liệu chỗ ở crawl từ OTA (homestay / theo giờ / theo "gu") vào dashboard — nối với dự án chicstay-data ở mục 4. Kết nối tới DB chicstay riêng (cùng máy chủ, khác tên DB) qua một pool mới.
4 endpoint đọc bảng properties: danh sách/tìm kiếm có phân trang & lọc, chi tiết một chỗ ở (giá, đánh giá, phòng, chính sách, tóm tắt AI), bộ lọc (loại hình/thành phố) và số liệu tổng quan.
Hiện mới có backend, chưa dựng màn hình cho người dùng — đây là nền để sau này gắn trình duyệt ChicStay vào dashboard.
4. chicstay-data — Đường ống dữ liệu OTA cho ChicStay — dự án mới
Dự án mới phục vụ ChicStay — nền tảng đặt phòng hướng tới Gen Z, tập trung vào "phòng có gu" (phòng theo chủ đề/thẩm mỹ) và đặt theo giờ cho homestay/căn hộ. Tuần này dựng phần thu thập & mô hình hoá dữ liệu: giải mã cách các sàn OTA lớn trả dữ liệu rồi tái hiện lại để lấy thông tin chỗ ở/phòng/giá/đánh giá.
Kết quả chính: đã giải mã trọn quy trình lấy dữ liệu của 5 sàn OTA (tìm kiếm → chi tiết → phòng → đánh giá), mỗi sàn có một "trình lái" chạy bằng Chrome thật (Playwright), tài liệu quy trình và kho request/response mẫu thực tế. Đây là nền để về sau crawl diện rộng dữ liệu chỗ ở cạnh tranh & nguồn cho ChicStay.
Sàn OTA
Cách lấy dữ liệu
Chống bot
Booking.com
Toàn bộ đi qua 1 địa chỉ GraphQL, phân biệt bằng tên thao tác (tìm kiếm, chi tiết, tiện ích, đánh giá…); trang tìm kiếm đã kèm sẵn giá + phòng + toạ độ + tóm tắt đánh giá
Chỉ AWS WAF, không thấy captcha
Traveloka
API REST: danh sách, chi tiết, phòng, đánh giá
DataDome (chặn headless + vào link sâu)
Agoda
GraphQL tìm kiếm theo thành phố + REST bảng phòng & đánh giá
Không chặn cứng; nhiều popup
Trip.com
API nội bộ Ctrip: danh sách, chi tiết, phòng, bình luận
Thỉnh thoảng bắt đăng nhập
Airbnb
GraphQL: tìm kiếm (132 chỗ/lần), chi tiết, lịch giá 12 tháng, đánh giá
Không chặn cứng
Quy tắc chống bot dùng chung — dùng Chrome thật với hồ sơ cố định, luôn vào từ trang chủ & thao tác như người thật; nhảy thẳng vào link sâu sẽ bị chặn ngay (đã kiểm chứng trên Traveloka).
Mô hình dữ liệu chuẩn hoá — dò toàn bộ trường của 5 sàn rồi rút ra mô hình chung; nâng thiết kế DB từ 1 bảng phẳng lên 3 bảng (thương hiệu → chỗ ở → phòng), có sẵn cột thẻ vibe/chủ đề và giá theo giờ (2h/3h/qua đêm) đúng định hướng sản phẩm.
Khởi tạo DB chicstay, đổ dữ liệu homestay từ chicgo sang làm nền, và chạy thử crawl mẫu 5 chỗ ở Hà Nội từ Traveloka vào DB để kiểm chứng.
Đang dở Mới ở giai đoạn bắt mẫu / chạy thử — chưa crawl diện rộng theo thành phố, chưa có đường ống nạp dữ liệu chính thức; phần lớn code còn chưa commit.
Việc tiếp theo
chicgo_data (deploy) — redeploy crawler HCM sang code "tách theo tỉnh" trước khi bật dịch vụ 4 tỉnh, để tránh lệch dữ liệu; sau đó bắt đầu crawl Huế / Đà Nẵng / Quảng Ninh / Hải Phòng.
chicgo_data (QC) — cập nhật thang chấm điểm BD để ghi nhận nguồn nghiên cứu của engine nội bộ (hiện đang bị tính 0 điểm), và bổ sung các trường marketing còn trống (giới thiệu, vibe).
Vận hành — xác nhận với đội nguyên nhân confirm tăng vọt 23–25/07 (~1.200/ngày) có duy trì được không; còn ~4.650 địa điểm đã enrich chưa confirm để dọn.
chicdata_dashboard — dùng công cụ nhập CTV để onboard tiếp; gắn màn hình ChicStay lên phần backend đã dựng.
chicstay-data — chuyển từ chạy thử sang crawl diện rộng theo thành phố, nạp dữ liệu 5 sàn vào mô hình 3 bảng mới; commit & sinh file schema tổng.