Web Scraping Python Với Proxy Dân Cư: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao

Web scraping là kỹ năng cốt lõi của data engineer, researcher và marketer 2026. Nhưng scraping mà không có proxy thì giống như đi câu cá mà không có mồi — thất bại chỉ là vấn đề thời gian. Bài viết này hướng dẫn web scraping với Python kết hợp proxy dân cư NestProxy.
Tại Sao Web Scraping Cần Proxy?
| Vấn đề | Không proxy | Có proxy dân cư |
|---|---|---|
| IP bị block | Sau 50-100 request | Scraping hàng ngàn trang |
| Rate limiting | Bị throttle ngay | Xoay IP → bypass limit |
| CAPTCHA | Hiện liên tục | Giảm 90% CAPTCHA |
| Geo-restriction | Chỉ thấy 1 vùng | Scraping 63 tỉnh/thành |
Setup Môi Trường
Cài đặt thư viện
# Cài đặt các thư viện cần thiết
pip install requests beautifulsoup4 playwright httpx
# Cài browser cho Playwright
playwright install chromiumPhương Pháp 1: Requests + BeautifulSoup (Nhanh, Nhẹ)
Phù hợp cho website tĩnh (không cần render JavaScript):
import requests
from bs4 import BeautifulSoup
import random
import time
# Pool proxy NestProxy
proxies_list = [
{"http": "http://key1:[email protected]:PORT"},
{"http": "http://key2:[email protected]:PORT"},
{"http": "http://key3:[email protected]:PORT"},
]
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
]
def scrape_with_proxy(url):
proxy = random.choice(proxies_list)
headers = {"User-Agent": random.choice(user_agents)}
try:
resp = requests.get(url, proxies=proxy, headers=headers, timeout=10)
soup = BeautifulSoup(resp.text, "html.parser")
return soup
except Exception as e:
print(f"Error: {e}, rotating proxy...")
return scrape_with_proxy(url) # Retry with new proxy
# Sử dụng
soup = scrape_with_proxy("https://example.com/products")
products = soup.find_all("div", class_="product-item")
for p in products:
print(p.find("span", class_="price").text)Phương Pháp 2: Playwright (Website Động, JavaScript)
Phù hợp cho Shopee, Lazada, TikTok — cần render JavaScript:
from playwright.sync_api import sync_playwright
import random
def scrape_dynamic_site(url, proxy_config):
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={
"server": proxy_config["server"],
"username": proxy_config["username"],
"password": proxy_config["password"],
},
headless=True
)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
)
page = context.new_page()
# Block images to speed up
page.route("**/*.{png,jpg,jpeg,gif,svg}", lambda r: r.abort())
page.goto(url, wait_until="networkidle")
# Random delay giữa các thao tác
page.wait_for_timeout(random.randint(1000, 3000))
content = page.content()
browser.close()
return content
# Cấu hình NestProxy
proxy = {
"server": "http://proxy.nestproxy.com:PORT",
"username": "YOUR_KEY",
"password": "YOUR_PASSWORD"
}
html = scrape_dynamic_site("https://shopee.vn/search?keyword=iphone", proxy)Phương Pháp 3: httpx Async (Tốc Độ Cao)
Scraping hàng ngàn trang đồng thời:
import httpx
import asyncio
async def scrape_url(client, url):
try:
resp = await client.get(url, timeout=10)
return {"url": url, "status": resp.status_code, "data": resp.text[:500]}
except:
return {"url": url, "status": "error"}
async def main():
proxy = "http://YOUR_KEY:[email protected]:PORT"
async with httpx.AsyncClient(proxy=proxy) as client:
urls = [f"https://example.com/product/{i}" for i in range(1, 1001)]
tasks = [scrape_url(client, url) for url in urls]
results = await asyncio.gather(*tasks)
success = [r for r in results if r["status"] == 200]
print(f"Success: {len(success)}/{len(urls)}")
asyncio.run(main())Best Practices Anti-Detection 2026
- Random delay: 2-5 giây giữa request (không đều đặn)
- Xoay User-Agent: Pool 10+ UA strings khác nhau
- Block resources: Tắt ảnh, CSS, font để tăng tốc
- Fingerprint spoofing: Dùng playwright-stealth
- Retry logic: Exponential backoff khi gặp 403/429
- Respect robots.txt: Tuân thủ quy định website
- Session management: Sticky session cho login flows
NestProxy + Python = Scraping Không Giới Hạn
- ✅ IP dân cư 63 tỉnh — bypass mọi anti-bot
- ✅ API đổi IP — tích hợp vào code Python
- ✅ HTTP + SOCKS5 — tương thích requests, Playwright, httpx
- ✅ Bandwidth không giới hạn — scraping thoải mái
- ✅ MCP cho AI Agent — scraping thông minh
👉 Bắt đầu scraping: nestproxy.com
Bài viết liên quan

Proxy Dân Cư Và Proxy Xoay Là Gì? Giải Thích Ngắn Gọn Cho Anh Em MMO
Proxy dân cư là gì, proxy xoay là gì, khác nhau ra sao và khi nào anh em MMO nên dùng từng loại. Bài viết ngắn gọn, dễ hiểu, tập trung vào cách chọn proxy đúng nhu cầu.

Vì Sao Dùng Proxy Vẫn Dính CAPTCHA? 9 Nguyên Nhân Thật Sự
Dùng proxy vẫn dính CAPTCHA? Tìm hiểu 9 nguyên nhân thật sự: IP reputation, shared proxy, cookie, fingerprint, hành vi automation và cách giảm rủi ro.