Scraping web ở quy mô lớn
(incolumitas.com)-
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
-
Cách dễ nhất là dùng proxy trả phí, nhưng chi phí khá đắt
→ 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ử
- Ban đầu tác giả dùng AWS Lambda + Puppeteer
→ 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
→ Nếu chạy đồng thời 1000 Lambda thì sẽ sử dụng khoảng 250 IP public
→ 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
→ 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)
→ Đây là câu chuyện trong giai đoạn 2019~2020 nên có thể bây giờ đã thay đổi
- Cách này có thể dùng để scrape Google/Bing/Amazon, nhưng vẫn có giới hạn
→ 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
→ Họ xác định bot bằng rất nhiều phương pháp fingerprinting trình duyệt khác nhau
→ Google Picasso, Font/TLS/WebGL Fingerprinting..
→ 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
- Hạ tầng scraping khó bị phát hiện và có thể mở rộng
→ Có hai quy tắc để scraping thành công
-
Đừng giả mạo cấu hình trình duyệt
-
Đ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”
→ Vì vậy, kết luận là tốt nhất nên “dùng thiết bị thật”
⇨ 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
⇨ Phân tán chúng ở nhiều thành phố khác nhau (gần trạm phát sóng)
⇨ Tận dụng mã nguồn mở như DeviceFarmer/stf để điều khiển các thiết bị cùng lúc
⇨ 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
⇨ “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
→ 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
- Cải tiến: giả lập Android
→ Thay vì mua thiết bị Android, dùng Android-X8, Bluestacks, Android Studio Emulator thì sao?
→ Proxidize cho phép tạo proxy di động 4G
→ Lắp 50 USB dongle 4G trên một server
→ Mỗi server giả lập 50~100 thiết bị Android
→ Đặt các trạm này ở 5 thành phố khác nhau
→ Quản lý các trạm này bằng lệnh shell chắc chắn, ổn định
12 bình luận
Proxy, dịch vụ scraping, phần mềm chống bot, v.v. đều được tổng hợp rất tốt trong bài viết trên.
Một pha hack thật tuyệt!
https://www.diffbot.com/products/crawl/
Cũng có các dịch vụ thực hiện crawling để scrape webpage. Dữ liệu đã scrape được lưu dưới dạng JSON sau khi loại bỏ thông tin không cần thiết.
Há hốc mồm...
Nhân tiện nói sang chuyện hoàn toàn khác..
Cũng có những nơi như https://serpapi.com/ bán API hóa Google Search..
Nhưng bên này còn API hóa cả tìm kiếm của Naver và bán cùng luôn haha
https://serpapi.com/naver-search-api
Mức giá đáng kinh ngạc? là $250 cho 30.000 lượt tìm kiếm mỗi tháng
Có phải là vì quá đắt đến mức gây sốc không? Tôi chưa hình dung được.
Ừ, rất đắt đấy. So với việc dùng proxy trả phí chẳng hạn thì vậy.
Nhưng vì là API nên khá tiện vì không phải lo bị chặn
Theo tiêu chuẩn trong nước thì có thể nghĩ đến các gói cước MVNO 0 won vẫn được cung cấp một lượng dữ liệu nhất định...
Nhưng vì khó đăng ký số lượng lớn nên cái này chắc cũng khó.
Với Google Fi thì có thể thêm tối đa 4 SIM dữ liệu bổ sung cho một đường dây, nên đây cũng có vẻ là một cách.
Trước đây khi tôi từng scrape một thứ gì đó của naver
thì trên AWS Lambda không được nhưng trên GCP Functions lại được,
tôi đã nghĩ là do dải IP được mở, nhưng có vẻ cũng không hẳn là vậy.
Tôi đã làm theo cách số 1 rồi nên mới xem thử còn có những cách nào khác.. đúng là điều tôi chưa từng nghĩ tới.
Thực ra, nếu làm theo cách đó thì phương án Lambda+Puppeteer số 1 cũng có vẻ ổn.
Nhưng khi so với cách dùng Proxidize ở cuối bài thì có lẽ chi phí sẽ khác nhau tùy theo quy mô scraping.
Càng cần xử lý khối lượng lớn thì Proxidize có lẽ sẽ ổn định hơn, nhưng để làm đơn giản thì cách số 1 cũng không tệ.
Món https://proxidize.com/ được giới thiệu ở cuối khá thú vị.
Đây là một giải pháp phần cứng + phần mềm cho phép bạn tự tạo và quản lý proxy di động 4G.
Bản 5 USB dongle có giá $399. Nhìn vào danh sách quốc gia của người dùng thì có cả Hàn Quốc, nên chắc là dùng được?
Không hẳn đến mức CGNAT, nhưng cũng có những giải pháp như Scrapoxy để quản lý cả một pool proxy phần mềm.