Chào ae, Đa số ae ở đây toàn cào dữ liệu nên mình muốn chia sẻ một vài kỹ thuật đã làm cũng như một số thách thức của mình, đây là những kỹ thuật mình đang và sẽ áp dụng trong spider bot của mình: 1. Hỗ trợ scale-out spiders Khi cào dữ liệu số liệu ít, giả sử 1 spider cào trung bình 40k pages/day (khoảng 2s/page) thì việc bạn viết các spider riêng cho từng victim sites của bạn khá dễ. Ví dụ hình sau mô tả việc cào dữ liệu của 1 site với tầm hơn 4 triệu dữ liệu. Tuy nhiên, nếu bạn muốn cào sites nhanh hơn mức 40k pages/day một ngày, giả sử 1M pages/day (cho nhiều victim sites) thì chắc chắn bạn cần tăng số spiders lên (nhu cầu cần 22 spiders hoặc tăng luồng tuỳ theo CPU bạn sở hữu), trong khi chia sẻ cùng 1 danh sách URLs. Khi đó bạn cần: hỗ trợ scale-out spiders (chạy spider trên servers hoặc VPS khác nhau) và 1 queue URLs DB (1 vps hoặc nhiều vps hỗ trợ HA). Ví dụ như hình sau: 2. Anti-bot detection Khi cào dữ liệu thì bạn có thể gặp những websites sử dụng các cơ chế chặn bot (dĩ nhiên họ sẽ ko chặn các Search engine nổi tiếng như Google, Bing,... rồi). Họ có thể sẽ sử dụng các cơ chế: - Phát hiện user-agents truy cập nhiều —> Giải pháp: dùng user-agent khác nhau hoặc dùng SE agents nổi tiếng cho mỗi lần request. Danh sách 450 User-Agents download tại http://cafemmo.club/threads/chia-se-danh-sach-user-agent-thong-dung-nhat.1818/ - Phát hiện IPs truy cập nhiều, giả sử 5 requests/s --> Giải pháp: dùng các dịch vụ IP rotator cho mỗi lần request. Mình dùng stormproxies(.)com. - Phát hiện người dùng thật qua Javascript, đa số bot ko hỗ trợ JS mà --> Giải pháp: dùng headless browser như Splash, Selenium, PhantomJS, Puppeter,... Có khá nhiều sites mình gặp dùng JS để detect robot như similarweb(.)com,... - Sử dụng honeypot traps: ví dụ như các links bẩy đính kèm display:none, visibility: hidden,... --> cài đặt cơ chế phát hiện các traps thôi ^^ - Sử dụng cookie, captcha để chặn, đa số sites dùng Cloudflare để chặn bot --> có vài script bypass Cloudflare rồi, sử dụng như https://github.com/Anorov/cloudflare-scrape (script này bypass cookie của Cloudflare nhưng chưa có cơ chế bypass captcha của Cloudflare nhé). 3. Ghi kết quả dữ liệu (scraped data) quá nhiều Khi bạn cào dữ liệu với nhiều spiders, ví dụ 1 spider cào được 1 record/2s, và bạn có 20 spiders thì bạn có 10 records/s, lúc này việc ghi dữ liệu quá nhiều và liên tục vào DB sẽ làm cho DB của bạn quá tải và giảm hiệu năng, có thể ảnh hưởng đến hiệu năng hoạt động. Khi đó, bạn nên cân nhắc dùng: - Bulk insert query: tức spider chỉ cần thực hiện 1 query để insert nhiều records - Bulk import file: tức là spider ghi dữ liệu vào 1 file với 1000 dữ liệu chẳng hạn, sau đó bạn sử dụng lệnh import file đó vào DB. Ví dụ: MySQL (LOAD DATA LOCAL INFILE), MongoDB (mongoimport) Các DB engines nào cũng hỗ trợ 2 dạng trên, ví dụ như MySQL, MongoDB,... 4. Cấu trúc site thay đổi Ví dụ như site thay đổi layout, tức HTML tags thay đổi, lúc này bạn phải thay đổi các selectors để lấy đúng dữ liệu bạn cần. Trong tình huống này, spider cần có cơ chế phát hiện sự thay đổi cấu trúc site để thông báo cho chúng ta và dừng extract data của site đó. Khi đó, mỗi site ta cần hỗ trợ nhiều schemas để extract dữ liệu hơn. Trên đây là một vài kỹ thuật chia sẻ cùng các bạn, nếu bạn biết kỹ thuật bypass tốt hơn hoặc khi cào dữ liệu mà bị các kỹ thuật chặn khác thì cùng chia sẻ để chúng ta cải tiến spider bot của chúng ta hơn nhé! Happy crawling strategy ^^
Quả thật công phu quá, không biết anh command được đào tạo qua trường lớp hay là anh tự học vậy ạ. Em cũng tự học mà vẫn chưa với được tới ngưỡng này.
Thanks anh, ngắn gọn xúc tích. Em hiện đang crawl chỉ bằng php có gặp trường hợp site detect bằng script như 1 tình huống kể trên nhưng crawl trên vps thì bị detect còn trên local thì.. delay chuẩn 1 tí thì vô tư. Ko biết php có giải pháp cho trường hợp này không ạ.
Mình là coder nên kiến thức lập trình thì có, còn crawler thì thực nghiệm là chính. Nếu ko ngại thì chia sẻ victim site đi bạn, mình ngâm cứu rồi mới chia sẻ đc, web mình bằng PHP nhưng crawler thì viết Python, nhưng bàn về giải pháp kỹ thuật thì ngôn ngữ nào cũng áp dụng được mà.
Đúng là lúc ở Đà Nẵng nhàn quá, có suy nghỉ về viết cái này. Nhưng sáng nay ngắm đồi thông Đà Lạt mới viết post này nhé!
Có e console thôi phải ko ae? Mình đi ngắm thông Đà Lạt rồi, mình ghé ĐN ít ngày mà mưa suốt, console cùng mình đi cổ vũ VN và Yemen ấy. Sau đó thắng lợi nên a đi ĐL cư trú.