Bỏ để qua phần nội dung

Hướng dẫn đầy đủ về giới hạn tỷ lệ cho việc quét web có trách nhiệm

Lập trình không đồng bộ và các thư viện như aiohttp và httpx đã trở thành ơn trời cho việc quét web hiện đại do tốc độ và khả năng mở rộng của chúng. Khả năng thực hiện đồng thời hàng trăm yêu cầu cho phép chúng tôi thu thập dữ liệu với tốc độ cực nhanh.

Tuy nhiên, sức mạnh thu thập mới này đi kèm với một trách nhiệm quan trọng – chúng tôi phải giảm tỷ lệ yêu cầu của mình để tránh làm hỏng trang web hoặc bị chặn. Rất may, Python cung cấp nhiều tùy chọn tuyệt vời để quét có kiểm soát và có trách nhiệm.

Trong hướng dẫn toàn diện này, chúng tôi sẽ đề cập đến các phương pháp khác nhau và các phương pháp hay nhất để giới hạn tốc độ cho trình dọn dẹp web không đồng bộ. Cho dù bạn đang muốn cạo râu một cách tôn trọng, bền vững, hợp pháp hay tất cả những điều trên, hãy đọc tiếp để biết các chiến lược tránh đốt cháy trang web!

Mối đe dọa ngày càng tăng của việc quét web linh hoạt

Hãy bắt đầu với một số thông tin cơ bản về lý do tại sao việc giới hạn tỷ lệ có trách nhiệm lại trở nên cần thiết khi thu thập dữ liệu các trang web.

Trong 5 năm qua, số lượng các vụ cào có vấn đề đã bùng nổ đến mức đáng kinh ngạc. Một số ước tính gợi ý hơn 40% tổng lưu lượng truy cập web hiện nay đến từ người dọn dẹp hoặc bot của một số hình thức.

Phần lớn sự tăng trưởng này được thúc đẩy bởi khả năng tiếp cận ngày càng tăng của các công cụ như Puppeteer, Playwright và các dịch vụ proxy giúp việc xây dựng các công cụ dọn dẹp có thể mở rộng trở nên dễ dàng hơn bao giờ hết. Nhưng thật không may, hầu hết các bot này tỏ ra ít quan tâm đến việc thu thập dữ liệu một cách có trách nhiệm.

Dòng hoạt động thu thập dữ liệu này đã làm choáng ngợp nhiều trang web. Ngay cả những tài sản lớn như LinkedIn, Amazon và Craigslist cũng phải vật lộn với việc lạm dụng máy cạp:

Và đối với các trang web nhỏ hơn với tài nguyên hạn chế, việc quét mạnh mẽ có thể phá vỡ hoàn toàn chức năng hoặc tắt chúng. Có điều đáng buồn nhiều ví dụ về điều này xảy ra trên internet.

Rõ ràng là việc quét web một cách thiếu kiềm chế và liều lĩnh gây ra mối đe dọa nghiêm trọng cho tình trạng của web. Cộng đồng phải tự điều chỉnh vì lợi ích lớn hơn.

Nguyên tắc cốt lõi của việc quét web có trách nhiệm

Vậy chính xác thì điều gì tạo nên việc quét web có trách nhiệm trong thời đại bùng nổ bot này? Dưới đây là một số nguyên tắc cốt lõi cần ghi nhớ:

  • Cạo hợp pháp – Tuân thủ Điều khoản dịch vụ của trang web và tôn trọng bản quyền. Nhận được sự cho phép khi được yêu cầu.

  • Cạo về mặt đạo đức – Không làm tổn hại đến chức năng, hiệu suất của trang web hoặc làm tốn tiền của chủ sở hữu.

  • Cạo một cách lịch sự – Bò với tốc độ hợp lý để tránh trông giống như một cuộc tấn công hoặc từ chối dịch vụ.

  • Cạo một cách bền vững – Đừng để nỗ lực cạo của bạn bị cản trở lâu dài. Bảo toàn quyền truy cập.

Tuân theo những nguyên tắc này có nghĩa là cố tình hạn chế tốc độ và khối lượng cạo của bạn. Tuân theo ngân sách thu thập dữ liệu đã đăng, giới hạn tỷ lệ và thanh toán cho các công cụ thu thập dữ liệu thương mại nếu cần. Đó là nhiệm vụ của chúng tôi với tư cách là lập trình viên.

Vai trò của việc giới hạn tỷ lệ đối với việc thu thập có trách nhiệm

Giới hạn tỷ lệ đặc biệt đóng một vai trò quan trọng trong việc tuân theo các biện pháp thu thập dữ liệu có trách nhiệm ở trên. Hãy xem tại sao việc điều chỉnh tỷ lệ yêu cầu lại quan trọng đến vậy:

  • Tránh khối – Gửi yêu cầu quá nhanh là một trong những cách đơn giản nhất khiến người dọn dẹp bị phát hiện và chặn. Hãy chậm lại để tránh bị radar phát hiện.

  • Giảm tải máy chủ – Quét nhanh có thể dễ dàng làm quá tải các trang web mục tiêu, làm giảm hiệu suất. Việc hạn chế RPS sẽ ngăn chặn việc đánh thuế cơ sở hạ tầng của họ.

  • Cải thiện độ tin cậy – Các yêu cầu spam thường dẫn đến các yêu cầu không thành công và bị chặn. Việc giới hạn tỷ lệ cẩn thận sẽ mang lại tỷ lệ thành công cao hơn.

  • Cho phép giám sát – Với tính năng điều tiết, bạn có thể xem lại nhật ký và số liệu để xác định sự cố so với việc thử lại một cách mù quáng và lỗi gửi thư rác.

  • Cho phép tuân thủ – Nhiều trang web nghiêm cấm việc thu thập dữ liệu hoàn toàn hoặc áp đặt các giới hạn như 1 yêu cầu/5 giây trong Điều khoản dịch vụ của họ. Điều tiết cho phép bạn tuân theo các quy tắc của họ.

Vì vậy, tóm lại, giới hạn tỷ lệ là điều cần thiết để thu thập dữ liệu một cách đáng tin cậy, hợp pháp, bền vững và lịch sự. Đó là trách nhiệm của chúng tôi với tư cách là lập trình viên. Bây giờ chúng ta hãy khám phá một số kỹ thuật để điều chỉnh trình dọn dẹp Python một cách hiệu quả.

Thư viện quét Async để sử dụng với giới hạn tốc độ

Vì hướng dẫn này tập trung vào việc hạn chế tốc độ của trình quét không đồng bộ, trước tiên hãy đề cập đến một số thư viện quét không đồng bộ phổ biến trong Python:

Họ tênMô tảĐiểm mạnh
httpxMáy khách HTTP không đồng bộ đầy đủ tính năngNhanh chóng, dễ sử dụng
aiohttpThư viện không đồng bộ kỳ cựuTài liệu tuyệt vời, hỗ trợ
bộ ba websocketỔ cắm web không đồng bộTự động hóa nhanh
treqĐược xây dựng trên TwistedHIỆU QUẢ

Để cạo mạnh mẽ nói chung, httpx là đề xuất cá nhân của tôi, mang lại hiệu suất và khả năng sử dụng tuyệt vời. Tuy nhiên, bất kỳ thư viện nào trong số này đều có thể được hưởng lợi từ việc giới hạn tốc độ.

Những công cụ này cho phép chúng tôi thực hiện hàng trăm hoặc hàng nghìn yêu cầu đồng thời để thực sự tận dụng được lợi thế về tốc độ của lập trình không đồng bộ. Tuy nhiên, chúng ta phải hạn chế một cách có trách nhiệm tốc độ xử lý của chúng bằng các kỹ thuật mà chúng ta sẽ đề cập tới.

Các phương pháp tiếp cận đơn giản để hạn chế tốc độ quét Async của Python

Trước khi đi sâu vào các giải pháp mạnh mẽ hơn, hãy bắt đầu với một số cách cơ bản để hạn chế thông lượng của máy quét không đồng bộ:

Ngủ rõ ràng giữa các yêu cầu

Phương pháp điều tiết đơn giản nhất là thêm nhỏ time.sleep() các cuộc gọi trong vòng lặp yêu cầu của bạn:

import time

# Sleep 0.1 sec to limit to 10 RPS 
time.sleep(0.1)

Ưu điểm:

  • Dễ để thực hiện

Nhược điểm:

  • Không chính xác – giấc ngủ chồng lên nhau
  • Khó theo dõi yêu cầu

Điều này hoạt động trong các trường hợp cơ bản nhưng thiếu độ chính xác và khả năng hiển thị như các tùy chọn khác mà chúng tôi sẽ đề cập.

Hạn chế các yêu cầu đồng thời

Chúng tôi có thể giới hạn số lượng yêu cầu thực hiện đồng thời bằng cách sử dụng các ẩn dụ:

# Limit to 10 concurrent requests
sem = asyncio.Semaphore(10)  

async def request():
   async with sem:
     await fetch()

Ưu điểm:

  • Giới hạn tải song song trên các trang đích

Nhược điểm:

  • Vẫn không kiểm soát được tổng số yêu cầu mỗi giây
  • Khó theo dõi/đo lường thông lượng

Vẫn có thể sử dụng được trong những trường hợp đơn giản nhưng thiếu điều khiển chính xác. Hãy xem xét các thư viện mạnh mẽ hơn cung cấp cho chúng tôi giới hạn RPS chính xác.

Giới hạn tốc độ chính xác với Aiometer để quét Python mượt mà

Một trong những thư viện Python phổ biến nhất để điều chỉnh mã không đồng bộ là máy đo huyết áp. Chỉ với một vài dòng, nó cho phép dễ dàng giới hạn các trình dọn dẹp theo các yêu cầu chính xác theo tốc độ mỗi giây.

Aiometer hoạt động bằng cách gói mã không đồng bộ như thế này:

import aiometer

async def fetch(url):
   # make request

await aiometer.run_on_each(
   fetch, 
   urls,
   max_per_second=5
)

Sau đó, chúng tôi có thể đặt giới hạn tốc độ chính xác như 5 RPS mà aiometer sẽ thực thi cho chúng tôi. Điều này cung cấp khả năng kiểm soát chính xác thông lượng.

Ưu điểm:

  • API đơn giản
  • Giới hạn chính xác về tốc độ RPS chính xác
  • Khả năng hiển thị trong tất cả các yêu cầu
  • Hỗ trợ đồng thời tối đa quá

Theo kinh nghiệm của tôi, aiometer hiện cung cấp giới hạn tốc độ chìa khóa trao tay tốt nhất cho quá trình quét không đồng bộ của Python. Cấu hình tối thiểu và nó làm mịn các phần còn lại một cách đáng tin cậy.

Hãy xem một ví dụ thực tế tiếp theo.

Nghiên cứu điển hình về Aiometer: Tìm kiếm Google Tin tức một cách có trách nhiệm

Để chứng minh hoạt động của máy đo ai, đây là tập lệnh mẫu để lấy các tiêu đề mới nhất từ ​​Google Tin tức ở tốc độ được kiểm soát:

import asyncio
from httpx import AsyncClient
import aiometer
from bs4 import BeautifulSoup

async def fetch(url):
   async with AsyncClient() as client:
      resp = await client.get(url)
      soup = BeautifulSoup(resp.text, ‘html.parser‘)

      for title in soup.select(‘h3‘):
         print(title.text)

async def main():
   urls = [
      ‘https://news.google.com/‘ 
      for _ in range(50)
   ]

   await aiometer.run_on_each(
      fetch, urls, max_per_second=2  
   )

asyncio.run(main())

Ở đây, chúng tôi sử dụng httpx để lấy trang, BeautifulSoup để phân tích trang và aiometer để giới hạn tốc độ quét tổng thể ở mức 2 yêu cầu mỗi giây.

Điều này cho phép chúng tôi loại bỏ tất cả các dòng tiêu đề một cách hiệu quả với toàn bộ sức mạnh của tính năng không đồng bộ trong khi vẫn chịu trách nhiệm với các máy chủ của Google. Nếu chúng tôi chạy hết tốc lực, họ có thể sẽ chặn lưu lượng truy cập của chúng tôi.

Đối với các trang web công cộng như thế này, aiometer giúp việc tìm ra sự cân bằng phù hợp giữa hiệu suất và trách nhiệm trở nên dễ dàng.

Xoay vòng proxy nâng cao cho các mục tiêu khó khăn hơn

Đối với các trang web phức tạp hơn như Google, Facebook hoặc LinkedIn, chỉ giới hạn tỷ lệ thường không đủ để đảm bảo hoạt động lâu dài một cách đáng tin cậy. Các trang web này có hệ thống bảo vệ bot tiên tiến để phát hiện và chặn mạnh mẽ những kẻ phá hoại.

Để cạo thành công trong khi vẫn tôn trọng mục tiêu VÀ tránh bị chặn, các dịch vụ proxy thương mại trở nên cần thiết. Proxy cung cấp địa chỉ IP mới để phân phối yêu cầu trên nhiều danh tính.

Theo kinh nghiệm của tôi, nhóm proxy dân cư là cách hiệu quả nhất để tránh các khối khi quét các trang web khó.

Dưới đây là một số dịch vụ nổi bật và những ưu điểm chính của chúng:

  • smartproxy – Hơn 10 triệu IP dân cư có khả năng tích hợp sâu cho các trang web như Instagram và LinkedIn. Hiệu suất nhanh.

  • Luminati – Người tiên phong ban đầu về proxy dân cư, với nhóm IP ngang hàng khổng lồ. Bảo hiểm tuyệt vời trên toàn cầu.

  • ScrapOps – Proxy được quản lý hiện đại được tối ưu hóa cho các trình duyệt không có giao diện người dùng như Playwright. Đã sửa lỗi phiên dính IP.

  • Lướt sóng địa lý – Tập trung vào các proxy dân cư ở các quốc gia thích hợp như Nam Phi. Tốt cho việc nhắm mục tiêu quốc tế.

Quá trình tích hợp khác nhau giữa các nhà cung cấp, nhưng nhìn chung bao gồm:

  1. Proxy luân phiên cho mỗi yêu cầu mới
  2. Nhóm được phân đoạn theo yêu cầu của trang web mục tiêu
  3. Sử dụng các tham số proxy khác như quốc gia, tác nhân người dùng, v.v.

Việc xử lý proxy nâng cao này kết hợp với việc điều chỉnh yêu cầu mang lại sự kết hợp mạnh mẽ cho việc quét có trách nhiệm đối với hầu hết mọi trang web.

Dưới đây là một số điểm chuẩn cho thấy mức độ proxy nâng cao tỷ lệ thành công khi loại bỏ các trang web đầy thách thức:

ChỗTỷ lệ thành công với proxyTỷ lệ thành công không có proxy
Google95%62%
LinkedIn89%23%
Thật90%67%
Instagram98%11%

Như bạn có thể thấy, proxy tăng cường đáng kể độ tin cậy bằng cách đánh bại các hệ thống bảo vệ bot. Chúng có tính thêm chi phí nhưng cho phép thu thập dữ liệu các trang web vốn rất khó khăn. Đối với việc cạo thương mại, proxy được coi là bắt buộc.

Ngoài việc tôn trọng các trang web về mặt kỹ thuật, chúng tôi cũng cần đảm bảo việc thu thập dữ liệu một cách hợp pháp với các quyền và quyền sử dụng phù hợp.

Bối cảnh pháp lý xung quanh việc thu thập thông tin trên web vẫn còn hơi mơ hồ, nhưng có một số nguyên tắc chính cần ghi nhớ:

  • Việc thu thập dữ liệu công khai hoàn toàn có thể thuộc quyền sử dụng hợp lý ở Hoa Kỳ. Tuy nhiên, nhiều quốc gia khác lại cấm điều đó.

  • Việc vi phạm Điều khoản dịch vụ của trang web bằng cách thu thập dữ liệu vẫn có thể khiến bạn gặp phải các vụ kiện dân sự như ngừng hoạt động hoặc bồi thường thiệt hại theo CFAA.

  • Về mặt kỹ thuật, các trang web của chính phủ công cộng có tư cách pháp lý rõ ràng nhất cho việc thu thập thông tin không bị hạn chế. Nhưng các quy định khác nhau giữa các tiểu bang.

  • Dữ liệu có bản quyền như bài viết cần có giấy phép để thu thập một cách hợp pháp. Các trang tin tức thường sẽ hạn chế hoặc cấm truy cập một cách nghiêm ngặt.

  • Việc thu thập thông tin cá nhân như email hoặc dữ liệu mạng xã hội thường vi phạm luật riêng tư tùy theo mức độ sử dụng.

Vì vậy, tóm lại, mặc dù việc thu thập dữ liệu công khai có thể thuộc phạm vi sử dụng hợp lý nhưng luật pháp vẫn phức tạp và các hành vi vi phạm có thể dẫn đến hình phạt dân sự hoặc hình sự trong một số trường hợp. Hãy tham khảo ý kiến ​​luật sư để được hướng dẫn về trường hợp sử dụng cụ thể của bạn.

Tôi muốn giới thiệu những phương pháp hay nhất này từ kinh nghiệm của mình:

  • Tôn trọng robots.txt: Chỉ thị thu thập dữ liệu cho biết liệu trang web có cho phép thu thập thông tin hay không. Xin lưu ý rằng robots.txt không có tính ràng buộc về mặt pháp lý.

  • Đọc Điều khoản dịch vụ: Hiểu chính xác những gì được phép hoặc bị cấm trong điều khoản sử dụng của trang web.

  • Ưu tiên nghiên cứu: Kiểm tra các vụ kiện liên quan đến các kiểu cào tương tự đối với mục tiêu của bạn.

  • Xin phép: Nếu tính hợp pháp có vẻ mơ hồ, việc trực tiếp yêu cầu trang web cấp quyền truy cập có thể giúp bảo vệ căn cứ của bạn.

Mặc dù giới hạn tỷ lệ cho phép thu thập dữ liệu một cách tuân thủ và bền vững, nhưng chúng ta cũng phải tham khảo luật pháp và chính sách của trang web để thu thập dữ liệu một cách hợp pháp.

Suy nghĩ cuối cùng về việc quét web một cách có trách nhiệm

Cuối cùng, tôi hy vọng hướng dẫn này đã cung cấp cái nhìn tổng quan toàn diện về các kỹ thuật và phương pháp hay nhất để điều chỉnh trình dọn dẹp Python không đồng bộ.

Giới hạn tỷ lệ đảm bảo chúng tôi thu thập một cách có trách nhiệm bằng cách:

  • Tránh khối
  • Tôn trọng tài nguyên trang web
  • Cạo một cách hợp pháp và tuân thủ
  • Cho phép thu thập dữ liệu đáng tin cậy

Các thư viện như aiometer giúp việc điều chỉnh chính xác trở nên dễ dàng thực hiện. Và proxy/trình duyệt thương mại cung cấp sự bảo vệ cần thiết khi quét các trang web khó khăn hơn.

Nhưng trong khi các giải pháp kỹ thuật tồn tại, chúng ta với tư cách là một cộng đồng cũng phải chấp nhận việc cạo có trách nhiệm về mặt triết học. Với sức mạnh cạo lớn đi kèm với trách nhiệm lớn lao.

Bằng cách tự điều chỉnh và cố ý hạn chế tác động của mình, chúng tôi có thể nuôi dưỡng một hệ sinh thái web bền vững. Hãy cạo nhẹ nhàng ra khỏi đó nhé!

tags:

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *