# VPS chạy tool scraping: kiến trúc, quy tắc và khi nào cần proxy

URL: https://cloudj.net/vi/blog/web-scraping-vps-united-states
Published: 2026-11-11 · Updated: 2026-11-11

> Cách dựng VPS chạy tool scraping tại Mỹ: lịch chạy và hàng đợi, RAM cho trình duyệt headless, tôn trọng robots.txt và khi nào nên thêm proxy riêng.

Chạy scraping một lần thì laptop là đủ. Nhưng khi công việc phải chạy mỗi đêm, tự thử lại khi lỗi và lưu lịch sử nhiều tháng, nó nên nằm trên máy chủ. Một **VPS chạy tool scraping** cho bạn máy luôn bật, IP cố định, tài nguyên ổn định và chỗ đặt database ngay cạnh crawler. Bài này đi qua cách bố trí máy chủ, trình duyệt headless thực sự cần bao nhiêu RAM, cách thu thập dữ liệu một cách lịch sự, và khi nào nên thêm proxy riêng thay vì crawl thẳng từ IP của máy chủ.

## Kiểm tra quy định trước khi viết code

Trước khi chọn cấu hình, hãy xác định bạn được phép thu thập những gì. Ba câu hỏi sau giải quyết phần lớn trường hợp:

- **File `robots.txt` của trang có chặn các đường dẫn bạn cần không?** Đây là yêu cầu công khai của chủ trang, hãy tôn trọng.
- **Điều khoản sử dụng nói gì?** Nhiều trang hạn chế truy cập tự động, và không ít trang có API chính thức hoặc chức năng xuất dữ liệu vừa dễ dùng vừa hợp lệ. Có thì nên dùng.
- **Có dính tới dữ liệu cá nhân không?** Thu thập thông tin về cá nhân kéo theo nghĩa vụ về quyền riêng tư, tùy theo nơi bạn và họ sinh sống. Bài viết không phải tư vấn pháp lý; nếu có dữ liệu cá nhân, hãy hỏi ý kiến chuyên môn trước.

Mọi hướng dẫn bên dưới giả định bạn thu thập dữ liệu công khai được phép, với tốc độ trang đích chịu được dễ dàng. Không cấu hình máy chủ hay proxy nào biến một việc bị cấm thành hợp lệ, và cũng không có gì đảm bảo bạn sẽ không bị chặn.

## Bố cục máy chủ chịu được tải thật

Scraper thường hỏng vì những lý do rất đời thường: selector thay đổi, trang bị timeout, tiến trình hết RAM lúc 3 giờ sáng. Tách các thành phần ra giúp mỗi lần hỏng tốn ít công sửa.

| Thành phần | Nhiệm vụ | Công cụ thường dùng |
|---|---|---|
| Bộ lập lịch | Quyết định crawl gì, lúc nào | cron, systemd timer hoặc scheduler của framework |
| Hàng đợi | Giữ danh sách URL và trạng thái thử lại | Redis hoặc bảng PostgreSQL |
| Fetcher | Tải trang qua HTTP | Python requests hoặc httpx, Scrapy |
| Renderer | Mở trang cần JavaScript | Playwright hoặc Puppeteer với Chromium headless |
| Parser và lưu trữ | Trích trường dữ liệu, ghi kết quả | PostgreSQL, file trên ổ đĩa hoặc ổ [Block Storage](https://cloudj.net/vi/block-storage), hoặc object storage cho HTML gốc |

Hãy để fetcher và renderer là hai loại worker riêng. Tải HTTP thuần rất nhẹ, còn trình duyệt headless thì nặng. Tách ra, bạn chạy được nhiều fetcher rẻ và chỉ vài trình duyệt, chỉ chuyển URL sang trình duyệt khi request thường không lấy được dữ liệu.

Nếu được, lưu cả phản hồi gốc bên cạnh dữ liệu đã bóc tách. Khi parser có lỗi, bạn chỉ cần phân tích lại trang đã tải hôm qua thay vì crawl lại trang đích.

## Chọn cấu hình VPS chạy tool scraping

Máy chủ Cloudj tại Mỹ bắt đầu từ 1 vCPU, 1 GB RAM, 20 GB ổ đĩa và có thể lên tới cấu hình tùy chỉnh 104 vCPU, 512 GB RAM, nên bạn chọn máy theo crawler chứ không phải ngược lại.

- **Scraper chỉ dùng HTTP** tốn rất ít RAM cho mỗi request. Máy 1 đến 2 GB đủ cho bộ lập lịch, hàng đợi và một nhóm fetcher async với khối lượng vừa phải.
- **Trình duyệt headless** mới là phần tốn kém. Mỗi tiến trình Chromium mở vài tab có thể chiếm vài trăm MB, trang nhiều script còn cao hơn. Hãy tính RAM theo số browser context chạy đồng thời, rồi cộng thêm phần cho database.
- **Loại CPU.** CPU dùng chung ("Availability") hợp với fetcher HTTP, vốn chủ yếu chờ mạng. Nếu bạn render trang liên tục, CPU dedicated cho nhân riêng để gánh tải đều đặn đó.
- **Ổ đĩa.** HTML gốc tích lũy rất nhanh. Hãy nén, xoay vòng, hoặc chuyển ra khỏi máy chủ.

Bắt đầu nhỏ, theo dõi biểu đồ CPU, RAM và mạng trong console trong một lượt chạy thật, rồi tăng CPU, RAM hoặc mở rộng ổ đĩa khi số liệu cho thấy cần.

Lưu lượng cũng cần tính. Gói tháng tại Mỹ có sẵn 5 TB lưu lượng mỗi tháng; với gói theo giờ, lưu lượng tính theo số GB thực dùng. Crawl có render trang sẽ tải cả ảnh và script nên tốn lưu lượng hơn nhiều so với chỉ lấy HTML; hãy chặn ảnh và font trong trình duyệt khi không cần.

## Vì sao chọn máy chủ tại Mỹ

Chọn vị trí theo nơi trang đích được phục vụ và đối tượng mà nội dung hướng tới. Với website bán lẻ, tin rao hay báo chí của Mỹ, máy chủ tại Mỹ thấy đúng trang mà người dùng Mỹ thấy, và mỗi request đi một quãng ngắn. Cloudj có [máy chủ cloud tại Mỹ](https://cloudj.net/vi/cloud-servers/united-states) ở New York, Los Angeles, Santa Clara, Seattle, Chicago, Dallas, Atlanta và Miami. Bài [chọn VPS Mỹ](https://cloudj.net/vi/blog/best-vps-united-states) giúp bạn chọn thành phố, còn [hướng dẫn khu vực châu Mỹ](https://cloudj.net/vi/blog/americas-oceania-israel-vps-guide) so sánh thêm các lựa chọn khác.

Nếu trang đích là Shopee, Lazada hay các website Việt Nam, đặt máy chủ ở Mỹ lại không hợp lý; khi đó hãy chọn vị trí gần Việt Nam như Singapore hoặc Hồng Kông (Cloudj không có máy chủ tại Việt Nam), hoặc dùng [proxy Việt Nam](https://cloudj.net/vi/proxy-ipv4/vietnam) nếu cần IP trong nước.

## Crawl lịch sự là crawl bền

Thu thập dữ liệu có chừng mực cũng là kỹ thuật tốt: crawler lịch sự ít bị chặn hơn và ít hỏng hơn.

1. **Đặt User-Agent trung thực**, ghi rõ tên dự án và địa chỉ liên hệ.
2. **Giới hạn tốc độ theo từng tên miền**, không phải giới hạn chung. Với trang nhỏ, vài giây một request mỗi trang là điểm khởi đầu hợp lý; nếu trang công bố crawl delay thì làm theo.
3. **Lùi lại khi gặp lỗi.** Coi HTTP 429 và 503 là tín hiệu giảm tốc, và tuân theo header `Retry-After`.
4. **Dùng cache và request có điều kiện.** Gửi `If-Modified-Since` hoặc `ETag` để trang không đổi gần như không tốn tài nguyên của chủ trang.
5. **Crawl vào giờ thấp điểm** của trang đích nếu độ mới dữ liệu cho phép.

Một hàm tải trang lịch sự bằng Python trông như sau:

```python
import time, requests

session = requests.Session()
session.headers["User-Agent"] = "acme-price-study/1.0 (contact: data@example.com)"

def fetch(url, delay=3):
    r = session.get(url, timeout=30)
    if r.status_code in (429, 503):
        wait = int(r.headers.get("Retry-After", 60))
        time.sleep(wait)
        return fetch(url, delay)
    time.sleep(delay)
    return r
```

## Khi nào nên thêm proxy riêng

VPS có một IP công khai. Với nhiều việc hợp lệ, vậy là đủ, và bạn không cần thêm proxy theo mặc định. Proxy hợp lý trong vài tình huống cụ thể:

- **Bạn cần nhìn từ một quốc gia khác với máy chủ.** Ví dụ kiểm tra giá hiển thị trên gian hàng ở Mỹ và ở Việt Nam, hoặc xác minh quảng cáo theo vùng, đều cần IP ở các nước đó.
- **Khối lượng trải trên nhiều trang** và bạn muốn chia tải qua vài IP sạch thay vì dồn hết vào một IP.
- **Bạn cần IP trông như kết nối gia đình** để kiểm tra nội dung theo vùng, khi một số trang hiển thị khác cho dải IP datacenter.

Cloudj bán [proxy IPv4 riêng](https://cloudj.net/vi/proxy-ipv4) tại Việt Nam, Mỹ, Nhật Bản, Hàn Quốc, Singapore, Hồng Kông và Anh; mỗi IP là IP ISP tĩnh và chỉ cấp cho một khách hàng. Riêng Mỹ và Việt Nam có thêm proxy ISP dân cư tĩnh (residential tĩnh): IP dân cư từ nhà mạng gia đình và giữ cố định. Tất cả hỗ trợ HTTP, và SOCKS5 ở những vị trí có hỗ trợ. Xem [proxy Mỹ](https://cloudj.net/vi/proxy-ipv4/united-states) cho lựa chọn tại Mỹ, [proxy Việt Nam](https://cloudj.net/vi/proxy-ipv4/vietnam) cho trang đích trong nước, và [hướng dẫn proxy riêng](https://cloudj.net/vi/blog/dedicated-proxy-guide) để hiểu khác biệt giữa các loại.

Với scraper, whitelist IP thường là cách gọn nhất: thêm IP của VPS vào danh sách whitelist của đơn proxy (tối đa 20 địa chỉ), code kết nối mà không phải lưu mật khẩu. Các bài [scraping bằng Python qua proxy](https://cloudj.net/vi/blog/python-scraping-proxy) và [proxy cho Playwright, Puppeteer](https://cloudj.net/vi/blog/playwright-puppeteer-proxy) có code mẫu.

Proxy không thay đổi luật chơi. Hãy tuân theo điều khoản của từng trang, giữ giới hạn tốc độ, và đừng dùng proxy để lách lệnh chặn mà trang đã chủ động đặt ra.

## Câu hỏi thường gặp

### Có scraping từ VPS mà không cần proxy được không?

Được. Với nhiều việc, một IP máy chủ cùng giới hạn tốc độ hợp lý là đủ. Chỉ thêm proxy khi cần vị trí khác hoặc cần chia tải.

### Playwright cần bao nhiêu RAM?

Tính vài trăm MB cho mỗi browser context chạy đồng thời, cộng phần cho database. Máy 4 GB là điểm khởi đầu thoải mái cho vài trình duyệt song song.

### Gói theo giờ có hợp với scraping không?

Hợp với các đợt crawl ngắn, thỉnh thoảng mới chạy, nhưng nhớ xóa máy sau đó vì máy theo giờ đã tắt vẫn bị tính phí. Việc chạy hằng đêm thì gói tháng có sẵn lưu lượng dễ dự trù hơn.

### Scraping có hợp pháp không?

Tùy loại dữ liệu, điều khoản của trang và luật nơi bạn hoạt động. Hãy tôn trọng robots.txt và điều khoản sử dụng, tránh dữ liệu cá nhân nếu không có cơ sở hợp pháp, và hỏi luật sư khi chưa rõ.

## Dựng crawler của bạn

Triển khai một máy chủ nhỏ tại Mỹ, chạy thử một lượt crawl thật trong lúc theo dõi số liệu, rồi nâng cấp dần. Giá chính xác của máy chủ và proxy hiển thị trong [console Cloudj](https://app.cloudj.net) trước khi đặt, và bạn có thể so sánh trên [trang bảng giá](https://cloudj.net/vi/pricing). Tài khoản tính bằng USD, khách hàng Việt Nam nạp được bằng chuyển khoản ngân hàng theo VND.
