Code Proxy Xoay Python 2026: Hướng Dẫn Requests, Selenium Wire, Scrapy & Retry Logic
⚠️ Developer Insight: 90% hệ thống crawl bị block không phải do logic code, mà do cấu hình Proxy Python sai cách: reuse session quá lâu, thiếu retry logic, lệch TLS fingerprint hoặc rotate IP không khớp nhịp request. Bài viết này cung cấp giải pháp production-ready để build hệ thống automation bền bỉ tại 1IP.VN.
Benchmark: So sánh Requests vs Selenium vs Scrapy (2026)
| Thư viện | Req/s (Avg) | Captcha Rate | Phù hợp nhất |
|---|---|---|---|
| Requests / Aiohttp | 150+ | Trung bình | API Scraper, Bot nhẹ |
| Selenium Wire | 5-10 | Thấp | Nuôi via, Render JS |
| Scrapy | 500+ | Thấp (Middleware) | Enterprise Crawling |
1. Python Requests + SOCKS5: Cấu hình Proxy Auth
Để dùng SOCKS5, bạn cần cài đặt requests[socks]. Theo tài liệu từ Requests Documentation, việc truyền credentials trực tiếp vào URL là cách nhanh nhất:
import requests
from requests.auth import HTTPProxyAuth
# Link API đổi IP từ 1IP.VN
rotate_api = "https://api.1ip.vn/rotate?key=YOUR_KEY"
proxy_url = "http://username:password@ip:port"
def fetch_with_retry(url, retries=3):
requests.get(rotate_api) # Auto rotate trước khi chạy
for i in range(retries):
try:
resp = requests.get(url, proxies={"http": proxy_url, "https": proxy_url}, timeout=15)
return resp.status_code
except requests.exceptions.ProxyError:
print("Lỗi Proxy, retry...")
return None
2. Selenium Wire: Xử lý Authentication & Anti-detect
Selenium mặc định không hỗ trợ Auth Proxy qua webdriver.Chrome(). Sử dụng selenium-wire là chuẩn production 2026:
from seleniumwire import webdriver
# Cấu hình bypass anti-bot bằng undetected_chromedriver
options = {
'proxy': {
'http': 'http://user:pass@ip:port',
'https': 'https://user:pass@ip:port',
}
}
driver = webdriver.Chrome(seleniumwire_options=options)
3. Production Grade: Asyncio + Aiohttp + Rotating Proxy
Với hệ thống crawl hàng triệu trang, aiohttp kết hợp Proxy xoay dân cư là sự lựa chọn số 1:
import aiohttp
import asyncio
async def fetch(session, url):
proxy = "http://user:pass@ip:port"
async with session.get(url, proxy=proxy) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'https://api.ipify.org')
print(html)
asyncio.run(main())
Dữ liệu E-E-A-T: Benchmark hiệu suất crawl thực tế trên môi trường Ubuntu 24.04 tại 1IP.VN.
4. Kỹ thuật chống 403 Forbidden & TLS Fingerprint (JA3)
Google 2026 chặn bot dựa trên TLS Fingerprint (JA3). Dù IP sạch từ Residential Proxy, nếu stack TLS của thư viện Python bị nhận diện là "bot-like", bạn vẫn dính 403 Forbidden.
Giải pháp: Sử dụng thư viện curl_cffi để giả lập TLS bắt tay giống hệt trình duyệt Chrome.
5. Các lỗi thường gặp và cách Debug (ProxyError, Timeout)
- requests.exceptions.ProxyError: Thường do sai Auth hoặc IP của bạn chưa được Whitelist.
- ERR_TUNNEL_CONNECTION_FAILED: Lỗi kết nối tunnel trong Selenium, cần check lại Port SOCKS5.
- 429 Too Many Requests: Bạn đang gọi API Rotate quá nhanh (Cooldown < 5s).
TEST TRỰC TIẾP API ROTATE TỐC ĐỘ < 1S CHO PYTHON
Hạ tầng SOCKS5 chuyên biệt cho Requests, Scrapy và Aiohttp.
DÙNG THỬ PROXY DEV NGAY6. FAQ - Câu hỏi thường gặp cho Developer
Cách fix 403 forbidden trong Python Requests?
Bổ sung Random User-Agent và sử dụng curl_cffi để giả lập TLS Fingerprint giống trình duyệt người dùng thật.
SOCKS5 có dùng được trong Scrapy không?
Có, bạn cần cài đặt scrapy-socks và cấu hình trong settings.py.