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

Mã trạng thái 429: Ý nghĩa và cách ngăn chặn khi quét web

  • by
  • Blog
  • Đã đọc 10 phút

Nếu bạn đã từng thử tìm kiếm trên web, có thể bạn đã từng gặp phải mã trạng thái 429 đáng sợ tại một thời điểm nào đó. Phản hồi khó chịu này có thể ngăn trình thu thập thông tin của bạn theo dõi và làm hỏng nỗ lực trích xuất dữ liệu của bạn. Nhưng chính xác thì mã trạng thái 429 có ý nghĩa gì và làm cách nào bạn có thể tránh gây ra lỗi này khi tìm kiếm các trang web? Trong hướng dẫn toàn diện này, chúng tôi sẽ đi sâu vào chi tiết về mã trạng thái 429 và chia sẻ các chiến lược đã được chứng minh để ngăn nó cản trở các dự án quét web của bạn.

Hiểu mã trạng thái 429

Mã trạng thái 429, còn được gọi là "Quá nhiều yêu cầu", là mã trạng thái phản hồi HTTP mà máy chủ gửi khi người dùng thực hiện quá nhiều yêu cầu trong một khoảng thời gian ngắn. Đó là một phần của lớp mã trạng thái 4xx, cho biết lỗi phía máy khách.

Khi máy chủ trả về mã trạng thái 429, về cơ bản, máy chủ sẽ thông báo cho khách hàng (trong trường hợp này là trình quét web của bạn) rằng máy chủ đã vượt quá giới hạn tốc độ hoặc hạn ngạch gửi yêu cầu. Giới hạn tốc độ là một kỹ thuật được nhiều trang web sử dụng để bảo vệ máy chủ của họ khỏi bị choáng ngợp bởi quá nhiều yêu cầu và để ngăn chặn việc lạm dụng hoặc lạm dụng tài nguyên của họ.

Nhận được lỗi 429 trong khi thu thập dữ liệu có thể khiến bạn khó chịu vì nó tạm thời chặn quyền truy cập của bạn vào trang web mục tiêu. Nếu bạn tiếp tục gửi yêu cầu sau khi nhận được 429, máy chủ có thể áp đặt giới hạn tốc độ chặt chẽ hơn hoặc thậm chí cấm hoàn toàn địa chỉ IP của bạn. Do đó, điều quan trọng là phải hiểu nguyên nhân gây ra lỗi 429 và cách tránh chúng trong nỗ lực quét web của bạn.

Tại sao các trang web thực hiện giới hạn tỷ lệ?

Trang web thực hiện giới hạn tỷ lệ vì một số lý do:

  1. Bảo vệ máy chủ: Yêu cầu quá mức có thể làm quá tải máy chủ của trang web, có khả năng gây chậm, treo hoặc ngừng hoạt động. Bằng cách giới hạn số lượng yêu cầu mà khách hàng có thể thực hiện trong một khung thời gian cụ thể, các trang web có thể bảo vệ máy chủ của họ khỏi bị quá tải và đảm bảo trải nghiệm người dùng mượt mà cho khách truy cập hợp pháp.

  2. Sự công bằng và phân bổ nguồn lực: Giới hạn tỷ lệ đảm bảo rằng tài nguyên của trang web được phân bổ công bằng giữa những người dùng. Nó ngăn chặn một khách hàng hoặc một nhóm nhỏ người dùng độc quyền tài nguyên của máy chủ, cho phép mọi người truy cập bình đẳng.

  3. Phòng chống lạm dụng: Giới hạn tỷ lệ giúp chống lại các hành vi lạm dụng như gửi thư rác, tấn công vũ phu hoặc thu thập dữ liệu tự động vi phạm điều khoản dịch vụ của trang web. Bằng cách hạn chế số lượng yêu cầu, các trang web có thể ngăn chặn các tác nhân độc hại và duy trì tính toàn vẹn của nền tảng của họ.

  4. Tuân thủ Điều khoản sử dụng API: Nhiều trang web cung cấp API để nhà phát triển truy cập dữ liệu của họ. Các API này thường đi kèm với các điều khoản sử dụng cụ thể và giới hạn tỷ lệ để ngăn chặn việc lạm dụng và đảm bảo việc sử dụng hợp lý. Vượt quá giới hạn tỷ lệ được chỉ định có thể dẫn đến 429 lỗi.

Nguyên nhân phổ biến gây ra lỗi 429 khi quét web

Một số yếu tố có thể kích hoạt mã trạng thái 429 trong khi quét các trang web:

  1. Gửi quá nhiều yêu cầu: Nếu trình quét của bạn gửi một lượng lớn yêu cầu đến một trang web trong thời gian ngắn, nó có thể vượt quá giới hạn tốc độ do máy chủ đặt ra, dẫn đến lỗi 429.

  2. Cạo quá nhanh: Gửi yêu cầu liên tiếp nhanh chóng mà không có bất kỳ sự chậm trễ nào giữa chúng cũng có thể kích hoạt giới hạn tốc độ. Các trang web có thể hiểu hành vi này là lạm dụng hoặc giống bot và phản hồi bằng mã trạng thái 429.

  3. Bỏ qua Robots.txt: Các trang web sử dụng tệp robots.txt để chỉ định quy tắc cho trình thu thập dữ liệu web. Nếu công cụ quét của bạn bỏ qua các quy tắc này và cố gắng truy cập các trang bị hạn chế hoặc gửi yêu cầu quá thường xuyên, nó có thể gặp phải lỗi 429.

  4. Sử dụng một địa chỉ IP duy nhất: Nếu tất cả yêu cầu của bạn bắt nguồn từ một địa chỉ IP duy nhất, trang web có thể coi đó là hành vi đáng ngờ và áp đặt giới hạn tốc độ. Phân phối yêu cầu của bạn trên nhiều địa chỉ IP có thể giúp giảm thiểu vấn đề này.

  5. Không xử lý phiên hoặc cookie đúng cách: Một số trang web sử dụng giới hạn tốc độ dựa trên phiên, trong đó các giới hạn được thực thi cho mỗi phiên của người dùng. Nếu công cụ thu thập dữ liệu của bạn không xử lý phiên hoặc cookie chính xác, công cụ thu thập dữ liệu đó có thể được coi là người dùng mới cho mỗi yêu cầu, nhanh chóng làm cạn kiệt giới hạn tốc độ.

Các phương pháp hay nhất để ngăn chặn lỗi 429 khi quét web

Bây giờ chúng ta đã hiểu nguyên nhân gây ra lỗi 429, hãy khám phá một số phương pháp hay nhất để ngăn chặn chúng:

  1. Điều tiết yêu cầu của bạn: Triển khai cơ chế điều tiết trong công cụ thu thập dữ liệu của bạn để giới hạn số lượng yêu cầu được gửi trong một khung thời gian cụ thể. Thêm độ trễ giữa các yêu cầu để mô phỏng hành vi giống con người và tránh làm máy chủ bị quá tải. Bạn có thể sử dụng các thư viện như time.sleep() trong Python để tạo khoảng dừng giữa các yêu cầu.

  2. Phân phối yêu cầu trên nhiều địa chỉ IP: Sử dụng nhóm proxy hoặc xoay địa chỉ IP để phân phối yêu cầu của bạn. Bằng cách gửi yêu cầu từ các địa chỉ IP khác nhau, bạn có thể tránh kích hoạt giới hạn tốc độ liên quan đến một IP. Hãy cân nhắc việc sử dụng các dịch vụ proxy đáng tin cậy hoặc thiết lập cơ sở hạ tầng proxy của riêng bạn.

  3. Tôn trọng Robots.txt: Luôn kiểm tra tệp robots.txt của trang web bạn đang thu thập dữ liệu và tuân thủ các quy tắc của trang web đó. Tránh loại bỏ các trang bị tệp robots.txt không cho phép hoặc hạn chế. Việc tôn trọng các nguyên tắc thu thập dữ liệu của trang web có thể giúp ngăn ngừa lỗi 429 và duy trì nghi thức cạo tốt.

  4. Mô phỏng kiểu duyệt web của con người: Làm cho trình quét của bạn bắt chước hành vi duyệt web của con người để tránh bị phát hiện. Giới thiệu độ trễ ngẫu nhiên giữa các yêu cầu, thay đổi chuỗi tác nhân người dùng và tương tác với các thành phần của trang web (ví dụ: nhấp vào nút, điền biểu mẫu) để làm cho trình quét của bạn trông giống con người hơn.

  5. Sử dụng phiên và xử lý cookie: Duy trì các phiên và xử lý cookie đúng cách trong trình quét của bạn. Một số trang web sử dụng giới hạn tốc độ dựa trên phiên, do đó việc duy trì phiên theo yêu cầu có thể giúp bạn duy trì trong giới hạn tốc độ. Sử dụng các thư viện như request.Session() trong Python để quản lý phiên một cách hiệu quả.

  6. Thực hiện Backoff theo cấp số nhân: Nếu bạn gặp lỗi 429, hãy thực hiện chiến lược rút lui theo cấp số nhân. Thay vì thử lại yêu cầu ngay lập tức, hãy đợi khoảng thời gian tăng dần trước khi gửi yêu cầu tiếp theo. Điều này giúp máy chủ có thời gian để phục hồi và giảm nguy cơ gặp lại giới hạn tốc độ.

  7. Giám sát và Thích ứng: Theo dõi hiệu suất của máy cạp và phản hồi mà nó nhận được. Theo dõi 429 lỗi và điều chỉnh phương pháp thu thập dữ liệu của bạn cho phù hợp. Nếu bạn thường xuyên gặp phải tình trạng giới hạn tốc độ, hãy cân nhắc việc điều chỉnh tốc độ thu thập dữ liệu của mình, sử dụng các nhóm proxy khác nhau hoặc khám phá các nguồn dữ liệu thay thế.

  8. Liên hệ với chủ sở hữu trang web: Nếu bạn có lý do chính đáng để xóa một trang web và cần vượt quá giới hạn tỷ lệ, hãy cân nhắc liên hệ với chủ sở hữu trang web. Giải thích trường hợp sử dụng của bạn, thể hiện cam kết của bạn đối với các hoạt động thu thập dữ liệu một cách tôn trọng và yêu cầu quyền thu thập dữ liệu ở mức cao hơn. Một số trang web có thể cung cấp quyền truy cập API hoặc cung cấp các tùy chọn thân thiện với việc thu thập dữ liệu cho các trường hợp sử dụng cụ thể.

Xử lý 429 lỗi trong mã Scraping của bạn

Bất chấp những nỗ lực tốt nhất của bạn để ngăn chặn lỗi 429, đôi khi bạn vẫn có thể gặp phải chúng. Điều cần thiết là phải xử lý các lỗi này một cách khéo léo trong mã thu thập dữ liệu của bạn để đảm bảo quá trình thu thập dữ liệu diễn ra suôn sẻ. Đây là ví dụ về cách bạn có thể xử lý 429 lỗi bằng Python và thư viện yêu cầu:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

retry_strategy = Retry(
    total=3,  # Total number of retry attempts
    status_forcelist=[429],  # Retry on 429 status code
    backoff_factor=1  # Backoff factor for exponential delay
)

adapter = HTTPAdapter(max_retries=retry_strategy)

with requests.Session() as session:
    session.mount("https://", adapter)
    session.mount("http://", adapter)

    try:
        response = session.get("https://example.com")
        response.raise_for_status()
        # Process the response data
    except requests.exceptions.RequestException as e:
        print("Error occurred:", e)

Trong ví dụ này, chúng tôi xác định chiến lược thử lại bằng cách sử dụng Retry lớp học từ requests thư viện. Chúng tôi chỉ định tổng số lần thử lại, mã trạng thái để thử lại (429) và hệ số chờ cho độ trễ theo cấp số nhân giữa các lần thử. Sau đó chúng tôi tạo ra một HTTPAdapter bằng chiến lược thử lại và gắn nó vào phiên cho cả yêu cầu HTTP và HTTPS.

Bằng cách sử dụng phương pháp này, nếu gặp lỗi 429, trình quét sẽ tự động thử lại yêu cầu tối đa ba lần với độ trễ theo cấp số nhân giữa các lần thử. Điều này giúp xử lý các vấn đề giới hạn tốc độ tạm thời và cải thiện khả năng phục hồi của máy quét của bạn.

Gia công Web Scraping để tránh lỗi 429

Nếu bạn thấy mình liên tục gặp phải lỗi 429 hoặc nếu nhu cầu thu thập dữ liệu của bạn phức tạp, bạn có thể cân nhắc việc thuê ngoài các tác vụ thu thập dữ liệu web của mình cho các dịch vụ hoặc API chuyên nghiệp. Các dịch vụ này thường có mạng proxy rộng khắp, cơ sở hạ tầng mạnh mẽ và chuyên môn trong việc xử lý giới hạn tốc độ cũng như các thách thức thu thập dữ liệu khác.

Một số dịch vụ quét web và API phổ biến bao gồm:

  • Scrapy Cloud: Nền tảng quét web dựa trên đám mây xử lý cơ sở hạ tầng và quản lý quy trình quét web cho bạn.
  • ScrapingBee: Một API xử lý sự phức tạp của việc quét web, bao gồm xoay proxy, hiển thị JavaScript và CAPTCHA.
  • ParseHub: Một công cụ quét web trực quan cho phép bạn trích xuất dữ liệu mà không cần mã hóa, xử lý giới hạn tốc độ và các thách thức khác đằng sau hậu trường.

Gia công phần mềm quét web của bạn có thể giúp bạn tiết kiệm thời gian và công sức trong việc xử lý lỗi 429 và các trở ngại quét khác. Tuy nhiên, điều quan trọng là phải đánh giá cẩn thận nhà cung cấp dịch vụ, giá cả và sự tuân thủ của họ với các hoạt động thu thập dữ liệu hợp pháp và đạo đức trước khi sử dụng dịch vụ của họ.

Ví dụ về việc Scraping mà không gây ra lỗi 429

Để minh họa tính hiệu quả của các phương pháp hay nhất được đề cập ở trên, chúng ta hãy xem một số ví dụ về việc thu thập dữ liệu trang web mà không gây ra lỗi 429.

Ví dụ 1: Quét một trang web tin tức bằng tính năng điều chỉnh và proxy

Giả sử bạn muốn lấy các bài viết từ một trang web tin tức phổ biến. Để tránh đạt đến giới hạn tốc độ, bạn triển khai điều tiết và phân phối yêu cầu của mình trên nhiều địa chỉ IP bằng proxy. Đây là một ví dụ đơn giản sử dụng Python và thư viện yêu cầu:

import requests
from time import sleep
from random import randint

proxies = [
    {"http": "http://proxy1.example.com"},
    {"http": "http://proxy2.example.com"},
    {"http": "http://proxy3.example.com"}
]

def scrape_articles():
    base_url = "https://example.com/articles?page="
    num_pages = 10

    for page in range(1, num_pages + 1):
        proxy = proxies[randint(0, len(proxies) - 1)]
        url = base_url + str(page)

        try:
            response = requests.get(url, proxies=proxy)
            response.raise_for_status()
            # Process the article data
            sleep(randint(1, 3))  # Add random delay between requests
        except requests.exceptions.RequestException as e:
            print("Error occurred:", e)

scrape_articles()

Trong ví dụ này, chúng tôi xác định danh sách proxy và chọn ngẫu nhiên một proxy cho mỗi yêu cầu. Chúng tôi duyệt qua các trang bài viết, đưa ra yêu cầu tới từng trang bằng một proxy khác nhau. Chúng tôi thêm độ trễ ngẫu nhiên giữa các yêu cầu để mô phỏng hành vi giống con người và tránh gửi yêu cầu quá nhanh. Bằng cách phân phối yêu cầu trên nhiều địa chỉ IP và điều chỉnh yêu cầu, chúng tôi giảm khả năng kích hoạt giới hạn tốc độ và gặp phải lỗi 429.

Ví dụ 2: Quét trang web thương mại điện tử bằng phiên và cookie

Giả sử bạn muốn lấy thông tin sản phẩm từ một trang web thương mại điện tử sử dụng giới hạn tỷ lệ dựa trên phiên. Để xử lý phiên và cookie đúng cách, bạn có thể sử dụng request.Session() trong Python. Đây là một ví dụ:

import requests

def scrape_products():
    base_url = "https://example.com/products?page="
    num_pages = 5

    with requests.Session() as session:
        for page in range(1, num_pages + 1):
            url = base_url + str(page)

            try:
                response = session.get(url)
                response.raise_for_status()
                # Process the product data
            except requests.exceptions.RequestException as e:
                print("Error occurred:", e)

scrape_products()

Trong ví dụ này, chúng ta tạo một requests.Session() để duy trì phiên trong suốt quá trình thu thập dữ liệu. Chúng tôi lặp lại qua các trang sản phẩm, đưa ra yêu cầu bằng cách sử dụng phiên. Bằng cách sử dụng phiên, chúng tôi có thể lưu giữ cookie và thông tin khác liên quan đến phiên, đảm bảo rằng trang web xử lý các yêu cầu của chúng tôi như một phần của cùng một phiên người dùng. Điều này giúp ngăn chặn việc kích hoạt giới hạn tốc độ dựa trên phiên và giảm khả năng gặp phải lỗi 429.

Kết luận

Xử lý mã trạng thái 429 là một phần tất yếu của quá trình quét web, nhưng bằng cách hiểu nguyên nhân và thực hiện các phương pháp hay nhất, bạn có thể giảm đáng kể khả năng gặp phải những lỗi này. Kiểm soát các yêu cầu của bạn, phân phối chúng trên nhiều địa chỉ IP, tôn trọng robots.txt, mô phỏng hành vi của con người cũng như xử lý các phiên và cookie đúng cách đều là những chiến lược hiệu quả để ngăn chặn việc kích hoạt giới hạn tốc độ.

Hãy nhớ rằng việc quét web phải luôn được thực hiện một cách có trách nhiệm và có đạo đức. Tôn trọng các điều khoản dịch vụ của trang web, tuân thủ các nguyên tắc pháp lý và lưu ý đến tác động mà hoạt động thu thập dữ liệu của bạn có thể gây ra đối với tài nguyên của trang web. Nếu bạn gặp phải lỗi 429 dai dẳng dù đã làm theo các phương pháp hay nhất, hãy cân nhắc liên hệ với chủ sở hữu trang web hoặc khám phá các nguồn dữ liệu thay thế.

Bằng cách áp dụng các kỹ thuật và phương pháp hay nhất được đề cập trong hướng dẫn này, bạn sẽ được trang bị tốt để xử lý 429 mã trạng thái và thu thập dữ liệu trang web một cách thành công mà không làm gián đoạn dịch vụ hoặc vi phạm chính sách sử dụng của họ. Chúc mừng cạo!

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 *