Các nguyên tắc tốt nhất để lấy dữ liệu trên Website mà không bị chặn

Dữ liệu là “tài sản” quan trọng của “Business production”. Tuy nhiên, để tiết kiệm chi phí hoặc để thu thập dữ liệu từ những nguồn mà bạn muốn để phục vụ công việc của bản thân thì việc “Scrape” là việc bắt buộc.

Mặc dù việc thu thập dữ liệu trên các trang web nhỏ hiếm khi dẫn đến sự cố về việc thu thập dữ liệu nhưng khi bạn bắt đầu thu thập dữ liệu trên các trang web lớn hơn những trang web có cơ chế chống “Scrape” .

Bản thân mình cũng đã được trải nghiệm cảm giác này. Nó rất là CAY, cảm thấy bất lực và tồi tệ.

Trong bài viết này, mình sẽ chia sẻ một số phương pháp hay nhất về việc “đục” web để tránh việc bị chặn trong tương lai. Hi vọng nó sẽ hữu ích với bạn.

1. Use IP Rotation

Việc request lặp lại từ cùng một địa chỉ IP là dấu hiệu rõ ràng cho thấy bạn đang tự động hóa các request HTTPS/HTTP lên sever của họ. Người sở hữu có thể phát hiện và chặn IP của bạn bằng cách kiểm tra địa chỉ IP trong server log.

Hiện nay, có nhiều đơn vụ cung cấp dịch vụ này một cách tự động do đó không quá khăn để họ có thể ngăn chặn bạn.

Giải pháp: Hãy sử dụng Proxy Sever hoặc VPN để gửi request của bạn thông qua một loạt địa chỉ IP khác nhau. IP thực của bạn sẽ bị ẩn. Theo đó, bạn sẽ có thể quét hầu hết các trang web mà không gặp vấn đề gì.

Recommend: Nord VPN (mình đã sài thằng này để giải quyết bài toán của mình), ngoài ra có thể sử dụng bất kì VPN nào bạn thấy phụ hợp.

2. Set Additional Request Headers

Các browsers (real) sẽ có rất nhiều headers khác nhau, bất kỳ headers nào trong số này có thể được các trang web kiểm tra để chặn request của bạn.

Thường thì bạn sẽ không có Request Headers khi Scrape” .

Giải pháp: Do đó, để làm cho trình quét web của bạn trông real hơn, bạn hãy thêm vào nhé.

Bạn có thể sao chép tất cả các tiêu đề từ httpbin.org/anything. (Đây là những tiêu đề mà trình duyệt của bạn hiện đang sử dụng).

Hoặc có thể vào https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html để kiểm tra.

3. Set A Referrer

Referrer header là http request header thông báo cho trang web nơi bạn đã truy cập trước đó.

Bạn hiểu đơn giản là trang web bạn truy cập trước khi request vào Web của họ.

Giải pháp: Vì thế bạn nên đi từ Google vào nó sẽ làm bạn giống một người dùng thông thường hơn là Bot.

4. Web Scrape Slowly

Khi sử dụng các dịch vụ thu thập dữ liệu trên web, việc thu thập dữ liệu càng nhanh càng tốt. Tuy nhiên, một Real User ở lại một trang web, tốc độ duyệt web của họ khá chậm so với Bot của bạn. ( Con người cần phải suy nghĩ trước khi làm gì đó, còn bot thì không một vết xước =))))) )

Ngoài ra, chủ sở hữu trang web thường có thể phát hiện người dọn dẹp của bạn bằng cách phân tích:

  • Tốc độ cuộn trang của bạn.
  • Tần suất bạn nhấp và điều hướng trên các trang.
  • Nếu bạn tương tác với các trang quá nhanh, rất có thể trang web đó sẽ chặn bạn.

Giải pháp:

  • Random thời gian delay trong khi tương tác với nội dung JavaScript để mô phỏng hành vi của người dùng chuẩn.
  • Random thời gian giữa những Request

5. Pursue Different Scraping Patterns

Bạn nên kết hợp xen kẽ những action khác khi Scrape để tránh bị detect và chặn.

Hiểu đơn giản là, người dùng thật không thể chỉ lặp đi lặp lại 1 chuỗi action cụ thể.

Bad: Vào Login → Điền Username / Password → Vào trang cần lấy thông tin → Scrape

Good: Vào Login → Điền Username / Password → Vào trang cần lấy thông tin → Like / Xem Video → Scroll → Scrape

6. Web Scrape At Different Day Times

Bạn nên thực hiện Scrape vào nhiều khoảng thời gian cụ thể. Việc bạn request và thực hiện 1 hoạt động lặp đi lặp lại vào cùng 1 khoảng thời gian sẽ làm bạn bị nghi ngờ và gắn cờ.

7. Use Real User Agents

User Agents bao gồm một chuỗi duy nhất xác định thông tin trình duyệt đang được sử dụng, phiên bản của trình duyệt và hệ điều hành. Trình duyệt web User Agents cho trang web mỗi khi request được thực hiện.

Cơ chớ chặn Scrape có thể phát hiện bot nếu bạn thực hiện một số lượng lớn yêu cầu từ một tác nhân người dùng. Cuối cùng, bạn sẽ bị chặn.

Giải pháp: Để ngăn chặn tình trạng này, bạn nên có 1 build một danh sách User Agents có sẵn và override cho từng request vì không có trang web nào muốn chặn người dùng real.

8. Use Headless Browsers

Một số trang web khó Scrape hơn. Chúng được thiết lập để phát hiện từ extension trình duyệt, phông chữ web đến cookie của trình duyệt để kiểm tra xem yêu cầu có đến từ người dùng thực hay không.

Nếu bạn cần loại bỏ các trang web như vậy, bạn sẽ cần sử dụng trình duyệt không có giao diện người dùng. Các công cụ như Selenium và Puppeteer có nhiều tính năng như chụp ảnh màn hình tự động hoặc có thể nhấp vào các nút/thành phần nội dung tương tác.

9. Detect Website Changes

Thông thường chúng ta sẽ dựa vào DOM để Scrape lượng dữ liệu cần thiết.

Các trang web thường có bố cục và chủ đề độc đáo của riêng chúng, điều này có thể khiến cho phần element của bạn bị lỗi khi chủ sở hữu trang web quyết định thiết kế lại bố cục. (thay đổi tên class, hoặc bất kì một thẻ nào mà bạn gắn cờ)

Bạn sẽ cần phát hiện những thay đổi này bằng trình quét web của mình và tạo giải pháp giám sát liên tục để đảm bảo rằng trình thu thập dữ liệu web của bạn vẫn hoạt động. Một phương pháp là đếm số lượng yêu cầu thành công trên mỗi lần thu thập thông tin trên web.

Ngoài ra, bạn có thể tạo các bài kiểm tra đơn vị cụ thể cho các loại bố cục khác nhau:

Nếu có trang đánh giá hoặc trang sản phẩm thì bạn chỉ cần tạo UnitTest cho mọi loại bố cục trang. Sau đó, bạn sẽ chỉ cần gửi một số yêu cầu mỗi ngày để xem liệu bố cục có thay đổi hay không bằng việc liệu tất cả các UnitTest của bạn có thành công hay không.

10. Use a CAPTCHA Solving Service

Bạn có thể rất cẩn thận và xây dựng Bot giống như 1 người dùng thật, tuy nhiên chủ dự án sử dụng CAPTCHA để kiểm duyệt Real User request thì sẽ không còn cách nào khác ngoài sử dụng dịch vụ để vượt qua.

Giải pháp:

Phần kết luận

Hy vọng rằng qua bài viết bạn đã học được một số kỹ thuật mới về cách giảm khả năng scrape web của bạn bị chặn.

Nói chung, việc random IP của bạn và thêm Request Headers HTTP thực là quá đủ cho hầu hết các trường hợp sử dụng, tuy nhiên, đôi khi bạn sẽ phải sử dụng các Headless Browsers để lấy dữ liệu cần thiết.

0 Shares:
1 comment
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like
Read More

What’s new in Ruby 3.3.0

Table of Contents Hide YJITRJITIRBRangeRails Range#overlaps?(range)Ruby < 3.3Ruby 3.3Tham khảo Là một developer có niềm đam mê sâu…
Read More

Building a GraphQL API in Rails

Table of Contents Hide GraphQL là gì?Thiết Lập Dự Án RailsThêm DependenciesTạo Schema GraphQLĐịnh Nghĩa Các LoạiKiểm Thử…