Cách Xoay Vòng Proxy trong Python Sử Dụng Requests

8 tháng 9 2025
3 phút đọc
Tóm tắt được tạo bởi AI:

Khi thực hiện phân tích hoặc gửi yêu cầu đến một trang web, thường cần phải duy trì hoạt động ổn định trong điều kiện giới hạn kỹ thuật và khả năng bị chặn từ phía trang web. Một trong những phương pháp hiệu quả nhất để đạt được điều này là xoay vòng proxy trong Python. Như đã được thảo luận trước đó trong ngữ cảnh xoay vòng proxy là gì, phương pháp này cho phép địa chỉ IP được thay đổi cho mỗi yêu cầu hoặc theo khoảng thời gian định sẵn, giúp tránh captcha và ngăn vượt quá giới hạn do tài nguyên áp đặt. Nội dung này sẽ giải thích cách triển khai xoay vòng như vậy bằng thư viện requests phổ biến.

Xoay Vòng Proxy trong Python: Hướng Dẫn Từng Bước

Đầu tiên, cần có danh sách proxy cho web scraping. Những proxy này có thể tìm thấy trên các nguồn miễn phí, tuy nhiên cần hiểu rằng các trung gian này thường không đáng tin cậy, chậm, không ổn định và dễ bị chặn thường xuyên. Đối với các tác vụ nghiêm túc, nên sử dụng giải pháp từ các nhà cung cấp uy tín. Cách thuận tiện nhất là lưu chúng trong một tệp văn bản thuần hoặc dưới dạng danh sách Python:


proxies = [
    'http://user:pass@proxy1.com:8080',
    'http://user:pass@proxy2.com:8080',
    'http://proxy3.com:8080',  # không cần xác thực
]

Dưới đây là ví dụ về xoay vòng proxy trong Python bằng cách sử dụng requests. Để gửi yêu cầu qua một IP mới, tham số proxies được sử dụng trong requests.get() hoặc requests.post():


import requests
import random

proxy = random.choice(proxies)
response = requests.get('https://example.com', proxies={'http': proxy, 'https': proxy})

Có một số cách tiếp cận xoay vòng:

  1. Lựa chọn ngẫu nhiên – sử dụng random.choice().
  2. Vòng tuần tự – lặp qua danh sách theo chỉ số hoặc bằng iterator.
  3. Lựa chọn có lọc – ví dụ, chỉ sử dụng những proxy hoạt động hoặc nhanh nhất.

Cần triển khai xử lý lỗi, ví dụ, cho timeout hoặc lỗi proxy. Trong những trường hợp như vậy, một IP lỗi có thể được tạm thời loại bỏ khỏi danh sách:


try:
    response = requests.get('https://example.com', proxies={'http': proxy, 'https': proxy}, timeout=5)
except requests.exceptions.RequestException:
    proxies.remove(proxy)

Đây là những phương pháp hay nhất để xoay vòng proxy trong Python, có thể dễ dàng mở rộng để phù hợp với bất kỳ kịch bản nào. Các phần sau sẽ bao gồm các mẹo thực tế, lỗi thường gặp và cách xoay vòng proxy trong Python một cách hiệu quả.

Mẹo và Thực Hành Tốt Nhất cho Xoay Vòng Proxy trong Python

Để xoay vòng proxy trong Python nhằm đảm bảo hoạt động ổn định và hiệu quả, điều quan trọng là tuân theo một số khuyến nghị thực tế.

  1. Xoay vòng không chỉ proxy trung gian mà còn cả User-Agent.

Hầu hết các trang web phân tích không chỉ địa chỉ IP mà còn cả header của trình duyệt. Nếu mọi yêu cầu được gửi với cùng một User-Agent, điều đó sẽ nhanh chóng làm dấy lên nghi ngờ. Do đó, nên tạo header một cách động, ví dụ:


headers_list = [
    {'User-Agent': 'Mozilla/5.0 ...'},
    {'User-Agent': 'Chrome/114.0 ...'},
    # thêm nhiều tùy chọn
]

headers = random.choice(headers_list)
response = requests.get(url, headers=headers, proxies={'http': proxy, 'https': proxy})
  1. Truyền dữ liệu xác thực đúng cách.

Một số IP yêu cầu tên người dùng và mật khẩu. Trong những trường hợp như vậy, tốt hơn hết là ngay lập tức xác minh rằng thông tin đăng nhập được bao gồm trong URL và sử dụng đúng định dạng (http://user:pass@proxy:port). Xác thực không chính xác là một trong những nguyên nhân phổ biến nhất gây ra lỗi xoay vòng.

  1. Sử dụng logic lựa chọn thích ứng.

Thay vì chọn proxy trung gian một cách ngẫu nhiên mù quáng, hãy xem xét lịch sử ổn định của chúng. Ví dụ, duy trì thống kê đơn giản về số lượng yêu cầu thành công qua mỗi IP và ưu tiên những lựa chọn ổn định hơn.

Xử Lý Sự Cố Khi Xoay Vòng Proxy trong Python

Việc xoay vòng này không phải lúc nào cũng diễn ra suôn sẻ. Trên thực tế, có thể phát sinh một số khó khăn phổ biến và đây là cách để xử lý chúng.

  1. Sự cố kết nối và timeout.

Nếu một IP kết nối mới ngừng phản hồi hoặc tải quá lâu, yêu cầu có thể bị treo. Luôn đặt tham số timeout trong requests.get() và xử lý ngoại lệ bằng try/except. Ngoài ra, cũng nên loại bỏ một proxy khỏi nhóm sau một số lần thất bại liên tiếp.

  1. Lỗi proxy CSRF token.

Đôi khi xảy ra lỗi liên quan đến CSRF token. Nguyên nhân có thể bao gồm CSRF token không hợp lệ, cookie bị mất hoặc bị sửa đổi. Để khắc phục sự cố này, hãy kiểm tra xem cookie có được cho phép hay không và đảm bảo chúng không bị ghi đè. Nếu cookie an toàn được sử dụng, chúng sẽ không hoạt động với HTTP – proxy phải được cấu hình cho HTTPS.

  1. Bị chặn từ trang web mục tiêu.

Ngay cả khi có proxy trung gian, một trang web vẫn có thể phát hiện hoạt động đáng ngờ, biểu hiện dưới dạng captcha, giới hạn tốc độ, giảm tốc độ hoặc cấm IP hoàn toàn. Trong những trường hợp như vậy, xoay vòng không chỉ nên bao gồm IP mà còn cả header, cùng với việc đưa ra độ trễ giữa các yêu cầu (giới hạn tốc độ).

Kết Luận

Xoay vòng IP trong Python là một kỹ thuật cơ bản nhưng rất quan trọng cho việc tự động hóa các yêu cầu một cách ổn định và an toàn. Nó cho phép hoạt động nhất quán dưới các hạn chế và chặn, giúp thu thập dữ liệu cần thiết mà không gặp trở ngại không đáng có.

Điều này không chỉ đòi hỏi chuẩn bị danh sách proxy đủ mà còn cần triển khai logic được thiết kế tốt: xem xét các loại proxy, xử lý lỗi, tích hợp xoay vòng User-Agent và cẩn thận chọn chiến lược xoay vòng – dù là ngẫu nhiên hay thích ứng.

Nội dung của bài viết:

Các bài viết gần đây

Quay lại blog
Quay lại blog