Theo dõi giá siêu thị
- Vào tháng 12 năm 2022, tác giả đã xây dựng một website để theo dõi biến động giá tại ba chuỗi siêu thị lớn ở Hy Lạp.
- Trong quá trình này, nhiều vấn đề đã phải được giải quyết và cũng rút ra được nhiều bài học.
Scraping các website js
- Vấn đề chính là các website được render bằng JavaScript.
- Tác giả dùng Playwright để điều khiển trình duyệt web theo cách lập trình.
- Playwright hỗ trợ các trình duyệt Chromium, Safari, Firefox và có thể dùng cùng Node, Java, .NET, Python.
- Tác giả viết mã để xử lý cuộn vô hạn và trích xuất thông tin sản phẩm.
Tự động hóa
- Trên M1 MacBook Pro, việc scraping toàn bộ siêu thị mất từ 50 phút đến 2 giờ 30 phút.
- Cách này tốt cho phát triển và kiểm thử, nhưng cần một giải pháp bền vững hơn.
Dùng laptop cũ?
- Tác giả đã thử dùng một chiếc laptop cũ từ năm 2013, nhưng hiệu năng rất đáng thất vọng.
Dùng cloud?
- AWS quá đắt, còn Hetzner rẻ hơn nhiều.
- Tác giả quyết định dùng máy chủ của Hetzner.
Dùng cả laptop cũ lẫn cloud!
- Tác giả tự động hóa việc scraping trên máy chủ cloud, còn chiếc laptop cũ được dùng làm máy chủ CI.
- Tác giả thiết lập pipeline bằng Concourse và chạy tác vụ scraping mỗi ngày.
Vượt qua giới hạn IP
- Do các quy tắc tường lửa Akamai, các request từ địa chỉ IP không phải dân cư bị chặn.
- Tác giả dùng Tailscale để khiến các request trông như đến từ địa chỉ IP tại nhà.
Nguyên nhân và thời điểm thất bại
- Các dự án scraping bị ảnh hưởng bởi thay đổi từ phía các nhà phát triển website.
- Có hai kiểu thất bại: breaking change và non-breaking change.
- Nhận phản hồi nhanh là điều rất quan trọng.
Tối ưu hóa
- Tác giả thực hiện nhiều tối ưu như cảnh báo email, hysteresis, timeout, cấu hình retry, v.v.
- Hiệu năng được cải thiện bằng cách dùng máy chủ lớn hơn và giảm lượng dữ liệu cần fetch.
Chi phí
- Chi phí dùng máy chủ trên Hetzner là rất rẻ.
- Tác giả dùng free tier của R2 trên Cloudflare để giảm chi phí lưu trữ dữ liệu.
Kết luận
- Bài viết mô tả các thành phần chính để xây dựng pipeline scraping nhằm theo dõi biến động giá siêu thị.
Tóm tắt của GN⁺
- Bài viết này chia sẻ trải nghiệm sử dụng Playwright và các dịch vụ cloud để theo dõi biến động giá siêu thị.
- Nội dung đề cập đến cách scraping các website được render bằng JavaScript, cùng các phương pháp tự động hóa và tối ưu hóa.
- Bài viết cũng giải thích cách dùng Hetzner và Tailscale để giảm chi phí và vượt qua giới hạn IP.
- Đây có thể là tài liệu hữu ích cho những ai quan tâm đến web scraping và tự động hóa.
1 bình luận
Ý kiến trên Hacker News
Chia sẻ trải nghiệm từng gặp vấn đề tương tự
Đang thực hiện một dự án tương tự ở New Zealand
Đã tạo một website tương tự và nhận được nhiều sự quan tâm
Hai chuỗi siêu thị lớn của Australia có khả năng hình thành độc quyền thông qua thuật toán AI phân tích giá
Đã hoạt động hơn 8 năm ở thị trường Thụy Điển
Nếu có tính minh bạch về giá thì việc theo dõi sẽ dễ hơn nhiều
Cách thay đổi để scraper không bị lỗi
Chia sẻ trải nghiệm theo dõi giá khi chuyển đến khu vực mới
So với scraping, việc vượt qua các cơ chế chặn ngày càng tinh vi mới là phần khó hơn
Vấn đề nội dung được render bằng JavaScript phía client