Nếu bạn đang theo dõi giá của đối thủ trên Wildberries, Ozon hoặc Avito thông qua IMPORTXML trong Google Sheets, sớm hay muộn bảng tính sẽ bắt đầu xuất hiện lỗi #N/A, dữ liệu được cập nhật với độ trễ hàng giờ, và đôi khi hoàn toàn ngừng kéo dữ liệu. Đây không phải là lỗi — đây là sự va chạm với giới hạn của chính Google Sheets và bảo vệ các trang web khỏi các yêu cầu hàng loạt từ cùng một địa chỉ IP của Google. Trong bài viết này, chúng ta sẽ phân tích các dấu hiệu để nhận biết rằng bảng tính đã cạn kiệt tài nguyên của mình và cách chuyển sang trình phân tích riêng với proxy mà không gây đau đớn.
IMPORTXML hoạt động như thế nào và tại sao người ta sử dụng nó
IMPORTXML — là một hàm tích hợp trong Google Sheets, lấy dữ liệu từ trang web theo yêu cầu XPath và chèn chúng trực tiếp vào ô. Công thức dạng =IMPORTXML("URL"; "//span[@class='price']") cho phép bạn lấy giá của sản phẩm từ thẻ trên Wildberries hoặc Ozon mà không cần viết một dòng mã nào và tự động cập nhật mỗi giờ.
Đối với người bán và nhà tiếp thị, điều này trông giống như một giải pháp hoàn hảo: không cần nhà phát triển, không cần máy chủ, mọi thứ hoạt động ngay trong bảng tính quen thuộc. Một cửa hàng nhỏ với 20-30 sản phẩm thực sự có thể sống nhiều năm chỉ với một IMPORTXML mà không gặp vấn đề gì. Nhưng ngay khi số lượng SKU được theo dõi vượt quá vài trăm, và tần suất cập nhật không còn là một lần mỗi ngày mà là một lần mỗi giờ — các sự cố hệ thống bắt đầu xảy ra, mà không thể giải quyết bằng cách điều chỉnh các cài đặt của hàm.
Vấn đề là tất cả các yêu cầu IMPORTXML đều xuất phát từ các máy chủ của Google, chứ không phải từ máy tính của bạn. Google có một số lượng địa chỉ IP hạn chế cho các yêu cầu như vậy, và các thị trường biết rõ những khoảng này. Khi số lượng yêu cầu tăng lên, bảo vệ của trang web sẽ được kích hoạt — và thay vì giá trong ô, bạn sẽ thấy lỗi hoặc giá trị trống.
7 dấu hiệu cho thấy IMPORTXML không còn hoạt động hiệu quả
Trước khi lãng phí thời gian chuyển sang một giải pháp phức tạp hơn, hãy đảm bảo rằng vấn đề thực sự nằm ở giới hạn, chứ không phải do lỗi chính tả trong công thức. Dưới đây là những triệu chứng cụ thể để nhận biết điều này:
- Massive #N/A — đồng thời 30-50% công thức ngừng hoạt động, mặc dù hôm qua mọi thứ vẫn bình thường và cấu trúc trang không thay đổi.
- Độ trễ cập nhật tăng lên — trước đây dữ liệu được cập nhật trong 5-10 phút, giờ đây bảng tính "suy nghĩ" 30-40 phút hoặc không cập nhật hoàn toàn mà không cần tính toán thủ công.
- Lỗi "Resource at url contacted too many times" — thông báo trực tiếp từ Google rằng bạn đã chạm tới giới hạn nội bộ khi truy cập vào một miền.
- Dữ liệu đến đã lỗi thời — giá trong bảng khác với giá thực tế trên trang web, vì Google trả về phiên bản đã được lưu cache của trang thay vì phiên bản hiện tại.
- Số lượng hàng vượt quá 300-500 — càng nhiều công thức IMPORTXML trong một tài liệu, thì nguy cơ bị chặn theo miền càng cao.
- Cần tần suất cập nhật thường xuyên hơn một lần mỗi giờ — IMPORTXML về cơ bản không được thiết kế cho việc giám sát theo thời gian thực, nó không có cơ chế xoay vòng IP.
- Trang web yêu cầu xác thực hoặc captcha — Wildberries và Ozon ngày càng thường xuyên hiển thị các trang kiểm tra JavaScript mà IMPORTXML không thể vượt qua.
Nếu bạn gặp phải ít nhất 2-3 điểm trong danh sách — đây không phải là một lỗi tạm thời của Google Sheets, mà là giới hạn cấu trúc của công nghệ. Tiếp theo, bạn có thể sửa chữa công thức vô hạn, thêm IFERROR và tính toán thủ công, nhưng khối lượng công việc thủ công sẽ tăng nhanh hơn so với khối lượng dữ liệu hữu ích.
Tại sao các trang web chặn các yêu cầu từ Google Sheets
Các thị trường như Wildberries và Ozon hàng ngày nhận được hàng triệu yêu cầu tự động từ các đối thủ, dịch vụ phân tích và bot. Để không làm quá tải máy chủ và bảo vệ dữ liệu về giá khỏi việc phân tích hàng loạt, họ triển khai nhiều cấp độ bảo vệ:
- Giới hạn tỷ lệ theo IP — nếu một địa chỉ nhận được nhiều hơn N yêu cầu mỗi phút, IP sẽ bị chặn tạm thời.
- Phân tích User-Agent — các yêu cầu từ bot Google cho IMPORTXML dễ dàng phân biệt với trình duyệt thông thường qua tiêu đề.
- JavaScript-rendering — một phần nội dung được tải động qua các script, và IMPORTXML chỉ thấy HTML gốc mà không thực thi JS.
- Geo-filtering — các yêu cầu từ các địa chỉ IP máy chủ của Google thường bị lọc "không giống như một người mua thực sự".
Vấn đề chính nằm ở chỗ tất cả người dùng IMPORTXML trên toàn thế giới về mặt kỹ thuật sử dụng cùng một bộ địa chỉ IP máy chủ hạn chế của Google. Khi hàng ngàn bảng tính đồng thời truy cập vào cùng một miền Wildberries, bảo vệ của trang web không chặn một người dùng cụ thể, mà là một toàn bộ khoảng — và tất cả đều bị ảnh hưởng, bao gồm cả bạn.
IMPORTXML vs trình phân tích không mã vs trình phân tích riêng: bảng so sánh
Việc chuyển từ hàm tích hợp của Google Sheets không nhất thiết có nghĩa là thuê một lập trình viên. Có những lựa chọn trung gian. Chúng ta sẽ so sánh ba phương pháp theo các tiêu chí chính:
| Tiêu chí | IMPORTXML | Trình phân tích không mã (Octoparse, ParseHub) | Trình phân tích riêng với proxy |
|---|---|---|---|
| Cần mã | Không | Không | Có (hoặc nhà thầu) |
| Giới hạn yêu cầu | Cứng, ẩn | Phụ thuộc vào gói | Bạn tự kiểm soát |
| Xoay vòng IP | Không khả dụng | Được tích hợp một phần | Kiểm soát hoàn toàn qua proxy |
| Làm việc với các trang JS | Không | Có | Có (với Selenium/Playwright) |
| Tần suất cập nhật | Một lần mỗi giờ và ít hơn | Có thể cấu hình | Bất kỳ, đến thời gian thực |
| Quy mô (SKU) | Tối đa 200-300 | Tối đa vài nghìn | Không có giới hạn thực tế |
Các trình phân tích không mã là một bước trung gian tốt nếu bạn cần nhanh chóng hoàn thành nhiệm vụ mà không cần lập trình viên. Nhưng nếu việc theo dõi giá là một quy trình kinh doanh liên tục, chứ không phải là một nhiệm vụ đơn lẻ, thì trình phân tích riêng với proxy sẽ mang lại lợi ích từ việc kiểm soát dữ liệu và không phụ thuộc vào dịch vụ bên ngoài và các giới hạn của nó.
Các loại proxy cần thiết cho việc phân tích các thị trường
Lý do chính khiến trình phân tích riêng hoạt động ổn định hơn IMPORTXML là khả năng phân phối các yêu cầu giữa các địa chỉ IP khác nhau thay vì một nhóm máy chủ Google. Nhưng loại proxy cũng rất quan trọng:
- Proxy trung tâm dữ liệu — là lựa chọn nhanh nhất và tiết kiệm nhất để bắt đầu. Phù hợp nếu thị trường chưa nhận ra mẫu yêu cầu tự động. Tốt cho các thử nghiệm ban đầu của trình phân tích và số lượng SKU nhỏ.
- Proxy cư trú — sử dụng các địa chỉ IP thực tế của các nhà cung cấp dịch vụ gia đình, vì vậy chúng trông giống như những người mua hàng thông thường đối với Wildberries và Ozon. Đây là lựa chọn chính cho việc theo dõi giá thường xuyên trên quy mô công nghiệp, khi quan trọng là không bị chặn theo địa lý hoặc mẫu lưu lượng truy cập.
- Proxy di động — IP của các nhà mạng di động, mà các thị trường rất ít khi chặn, vì một IP di động thường phục vụ hàng nghìn người dùng khác nhau cùng một lúc. Thích hợp nếu cần phân tích qua các phiên bản di động của trang web hoặc ứng dụng.
Để bắt đầu theo dõi giá trên Wildberries và Ozon, sự kết hợp tối ưu là: proxy cư trú với xoay vòng IP cho mỗi yêu cầu hoặc mỗi vài phút. Điều này giảm thiểu nguy cơ bị chặn theo tỷ lệ và cho phép phân phối hàng nghìn yêu cầu giữa hàng trăm địa chỉ khác nhau, mô phỏng hành vi của người dùng bình thường từ các khu vực khác nhau.
Kế hoạch chuyển đổi từng bước sang trình phân tích riêng
Việc chuyển từ IMPORTXML không yêu cầu dừng hoàn toàn công việc — bạn có thể để bảng tính như một kênh dự phòng, trong khi trình phân tích mới đang được thử nghiệm.
- Ghi lại danh sách SKU và các bộ chọn XPath đã được sử dụng trong các công thức IMPORTXML — đây là bản đồ dữ liệu sẵn có cho giải pháp mới.
- Chọn định dạng trình phân tích: dịch vụ không mã (Octoparse, ParseHub, Apify) để bắt đầu nhanh chóng mà không cần lập trình viên, hoặc script trên Python/Node.js, nếu trong đội có lập trình viên hoặc freelancer.
- Kết nối proxy với xoay vòng IP. Nếu không có điều này, trình phân tích mới sẽ gặp phải những chặn tương tự như IMPORTXML, chỉ là muộn hơn một chút.
- Cấu hình lịch trình yêu cầu với độ trễ ngẫu nhiên nhỏ giữa các yêu cầu (2-5 giây) — điều này giảm khả năng kích hoạt bảo vệ theo mẫu.
- Xuất dữ liệu trở lại Google Sheets thông qua Google Sheets API hoặc dịch vụ như Zapier/Make, để không làm hỏng các báo cáo và bảng điều khiển quen thuộc của đội.
- Thử nghiệm trên 10-15% sản phẩm trong vòng một tuần, so sánh độ chính xác với dữ liệu từ các công thức IMPORTXML cũ trước khi hoàn toàn chuyển đổi.
- Cấu hình cảnh báo về lỗi — thông báo qua Telegram hoặc email, nếu trình phân tích bắt đầu nhận captcha hoặc mã 403, để ngay lập tức thay đổi proxy hoặc giảm tần suất yêu cầu.
Trình phân tích tối thiểu bằng Python với proxy
Nếu trong đội có lập trình viên, phiên bản cơ bản của trình phân tích chỉ mất vài chục dòng mã. Dưới đây là một ví dụ đơn giản về yêu cầu trang sản phẩm qua proxy bằng cách sử dụng thư viện requests:
import requests
import time
import random
proxies = {
"http": "http://login:password@proxy_host:port",
"https": "http://login:password@proxy_host:port",
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"
}
urls = [
"https://example-marketplace.com/product/12345",
"https://example-marketplace.com/product/67890",
]
for url in urls:
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
if response.status_code == 200:
# tiếp theo phân tích giá qua BeautifulSoup hoặc lxml
print(f"OK: {url}")
else:
print(f"Trạng thái {response.status_code} cho {url}")
except requests.exceptions.RequestException as e:
print(f"Lỗi yêu cầu: {e}")
time.sleep(random.uniform(2, 5)) # tạm dừng giữa các yêu cầu
Đối với các trang có tải động giá qua JavaScript (đặc trưng cho Wildberries và Ozon), thay vì requests thông thường, bạn sẽ cần Selenium hoặc Playwright, những công cụ này có khả năng render trang giống như một trình duyệt thực sự và cũng hỗ trợ truyền proxy qua các tham số khởi động.
Danh sách kiểm tra trước khi khởi động
- Danh sách URL và bộ chọn dữ liệu đã được chuyển từ các công thức IMPORTXML cũ
- Đã kết nối proxy với xoay vòng IP (proxy cư trú hoặc di động cho các thị trường)
- Đã cấu hình độ trễ ngẫu nhiên giữa các yêu cầu (2-5 giây)
- User-Agent và tiêu đề trình duyệt thực tế trong mỗi yêu cầu
- Đã cấu hình ghi log lỗi và cảnh báo về mã 403/captcha
- Dữ liệu được xuất ra định dạng quen thuộc (Google Sheets, CRM, bảng điều khiển BI)
- Đã tiến hành thử nghiệm trong 1-2 tuần trên một mẫu hàng trước khi chuyển đổi hoàn toàn
Kết luận
IMPORTXML là một công cụ tuyệt vời để bắt đầu, khi danh sách sản phẩm còn nhỏ và tần suất cập nhật không quá quan trọng. Nhưng ngay khi bạn thấy hàng loạt #N/A, độ trễ tăng lên và các thông báo lỗi trực tiếp về giới hạn — đó là tín hiệu rằng hàm tích hợp của Google Sheets đã đạt đến giới hạn kiến trúc. Về mặt kỹ thuật, điều này không thể được sửa chữa bằng cách điều chỉnh bảng tính, vì vấn đề nằm ở số lượng địa chỉ IP hạn chế của Google, mà các thị trường chặn hoàn toàn.
Việc chuyển sang trình phân tích riêng, dù là dịch vụ không mã hay script Python, giải quyết vấn đề chính bằng cách kiểm soát các địa chỉ IP của các yêu cầu. Nếu bạn dự định theo dõi giá thường xuyên trên Wildberries, Ozon hoặc Avito trên quy mô công nghiệp, chúng tôi khuyên bạn nên bắt đầu với proxy cư trú — chúng mang lại rủi ro thấp nhất về việc bị chặn nhờ sự tương đồng với lưu lượng truy cập của người mua thực. Đối với các thử nghiệm nhanh trong giai đoạn đầu, bạn có thể sử dụng các proxy trung tâm dữ liệu tiết kiệm hơn, và cho các kịch bản với các phiên bản di động của trang web — hãy xem xét các proxy di động.