Scraping web ở quy mô lớn
(incolumitas.com)<p>- Nếu bạn xây dựng một dịch vụ thực hiện hàng triệu lượt tìm kiếm Google, bạn sẽ cần một giải pháp thay thế để tránh bị chặn<br />
- Cách dễ nhất là dùng proxy trả phí, nhưng chi phí khá đắt <br />
→ Vì vậy tác giả đã viết một bài rất thú vị, giải thích chi tiết những gì mình đã thử<br />
<br />
- Ban đầu tác giả dùng AWS Lambda + Puppeteer <br />
→ AWS cung cấp 16 region trên toàn thế giới, và cứ chạy Lambda 3 lần thì sẽ được gán một IP mới <br />
→ Nếu chạy đồng thời 1000 Lambda thì sẽ sử dụng khoảng 250 IP public<br />
→ 16 region * 250 = 4000 địa chỉ IP, như vậy là đủ để thực hiện hàng triệu lượt tìm kiếm Google mỗi tuần <br />
→ Tác giả cũng đã thử trên GCP, và điều buồn cười là Google chặn IP cloud của chính họ quyết liệt hơn (so với AWS)<br />
→ Đây là câu chuyện trong giai đoạn 2019~2020 nên có thể bây giờ đã thay đổi <br />
<br />
- Cách này có thể dùng để scrape Google/Bing/Amazon, nhưng vẫn có giới hạn<br />
→ Nếu mục tiêu dùng các công ty chống bot như DataDome, Akamai, Imperva thì không áp dụng được <br />
→ Họ xác định bot bằng rất nhiều phương pháp fingerprinting trình duyệt khác nhau<br />
→ Google Picasso, Font/TLS/WebGL Fingerprinting..<br />
→ Thực tế, hầu hết các dịch vụ scraping quy mô lớn đều dùng cloud + container Docker nên rất dễ bị nhận diện<br />
<br />
- Hạ tầng scraping khó bị phát hiện và có thể mở rộng <br />
→ Có hai quy tắc để scraping thành công <br />
1. Đừng giả mạo cấu hình trình duyệt <br />
2. Điều quan trọng nhất là chỉ giả mạo cấu hình trình duyệt khi “không ai có thể nhận ra”<br />
→ Vì vậy, kết luận là tốt nhất nên “dùng thiết bị thật”<br />
⇨ Mua 500 thiết bị Android giá rẻ từ nhiều nhà sản xuất khác nhau và đăng ký các gói dữ liệu rẻ tiền<br />
⇨ Phân tán chúng ở nhiều thành phố khác nhau (gần trạm phát sóng)<br />
⇨ Tận dụng mã nguồn mở như DeviceFarmer/stf để điều khiển các thiết bị cùng lúc <br />
⇨ Cài OS nhẹ như Android Go và cứ 5 phút lại bật chế độ máy bay để liên tục lấy IP mới<br />
⇨ “4G carrier grade NAT”: NAT cấp nhà mạng 4G là cách được thiết kế để ngăn cạn kiệt địa chỉ IPv4, nên hàng trăm nghìn người cùng chia sẻ một IP, khiến việc chặn gần như bất khả thi<br />
→ Tuy nhiên, cách này rất phiền vì phải mua 500 thiết bị Android, cần địa điểm lắp đặt và còn phải bảo trì phần cứng <br />
<br />
- Cải tiến: giả lập Android <br />
→ Thay vì mua thiết bị Android, dùng Android-X8, Bluestacks, Android Studio Emulator thì sao?<br />
→ Proxidize cho phép tạo proxy di động 4G<br />
→ Lắp 50 USB dongle 4G trên một server<br />
→ Mỗi server giả lập 50~100 thiết bị Android <br />
→ Đặt các trạm này ở 5 thành phố khác nhau <br />
→ Quản lý các trạm này bằng lệnh shell chắc chắn, ổn định </p>
12 bình luận