Cách khắc phục lỗi IMPORTXML 'Imported content is empty' trong Google Sheets

intermediate📗 Google Sheets2026-06-10| Google Sheets (nền tảng Web), tất cả hệ điều hành

Error Message

Error: Imported content is empty.
#importxml#xpath#google-sheets#web-scraping#khắc phục lỗi

Sự cố khó chịu: Tại sao dữ liệu không hiển thịBạn đã thiết lập bảng tính để theo dõi giá sản phẩm trên Amazon hoặc tiêu đề từ một trang tin tức. Bạn đã viết công thức =IMPORTXML(url, xpath) một cách hoàn hảo. Nhưng thay vì dữ liệu, bạn lại nhận được hình tam giác đỏ đáng sợ cùng thông báo 'Imported content is empty.'

Đây là một rào cản rất phổ biến. Bạn có thể kiểm tra lại XPath trong Chrome DevTools hàng chục lần, nhưng ô tính vẫn trống trơn. Điều này hiếm khi xảy ra do XPath của bạn sai. Thông thường, nguyên nhân là vì Google Sheets và trang web mục tiêu không "hiểu" nhau.

Tại sao Google Sheets thấy trang trắngĐể khắc phục sự cố, bạn cần hiểu cách trình thu thập dữ liệu (scraper) của Google hoạt động. Không giống như trình duyệt của bạn, Google Sheets không phải là một công cụ tương tác. Khi bạn sử dụng IMPORTXML, máy chủ của Google sẽ gửi một yêu cầu cơ bản đến trang web. Nó giống như một trình duyệt chỉ có văn bản từ những năm 1990.

Có ba lý do chính khiến dữ liệu của bạn bị thiếu:

  • Rào cản JavaScript: Hầu hết các trang web hiện đại (xây dựng bằng React, Vue hoặc Angular) tải nội dung động. Vì Google Sheets không thực thi JavaScript, nó chỉ thấy mẫu HTML trống ban đầu.- Thẻ TBODY "ẩn": Công cụ 'Inspect' của Chrome thường tự động thêm thẻ <tbody> vào bảng để dễ đọc hơn. Những thẻ này thường không tồn tại trong mã nguồn gốc, khiến XPath của bạn bị lỗi.- Chống Bot: Các trang web như Amazon hoặc LinkedIn nhận diện được địa chỉ IP của Google. Họ có thể trả về lỗi 403 Forbidden hoặc CAPTCHA để chặn những gì họ coi là bot tự động.## Bước 1: Kiểm tra mã nguồn gốc (Raw Source)Cách nhanh nhất để xem Google Sheets thực sự "thấy" gì là bỏ qua quá trình kết xuất (rendering) của trình duyệt. Mở trang web mục tiêu và nhấn Ctrl + U (Windows) hoặc Cmd + Option + U (Mac). Thao tác này sẽ mở tab View Page Source (Xem nguồn trang). Tìm kiếm (Ctrl + F) mức giá hoặc văn bản cụ thể bạn muốn. Nếu nó không có ở đó, IMPORTXML sẽ không bao giờ tìm thấy vì dữ liệu được chèn sau đó bằng JavaScript. Nếu dữ liệu ở đó, XPath của bạn chỉ cần được tinh chỉnh lại.

Viết XPath hiệu quả hơnTránh sao chép 'Full XPath' từ Chrome. Chúng rất dễ hỏng nếu chỉ một thẻ div thay đổi. Thay vào đó, hãy nhắm mục tiêu vào các ID hoặc class duy nhất. Ví dụ: nếu bạn đang lấy giá từ một thẻ span:

=IMPORTXML("https://example.com", "//span[contains(@class, 'price-amount')]")

Lưu ý: Luôn xóa /tbody khỏi đường dẫn của bạn. Đây là lý do phổ biến nhất dẫn đến sự không khớp XPath trong Google Sheets.

Bước 2: Xử lý các trang web sử dụng nhiều JavaScriptNếu dữ liệu của bạn không có trong mã nguồn gốc ở Bước 1, IMPORTXML không phải là công cụ phù hợp. Bạn có hai lựa chọn thay thế.

Giải pháp thay thế bằng Apps ScriptĐôi khi một trang web chặn scraper mặc định của Google nhưng lại cho phép một yêu cầu tùy chỉnh. Bạn có thể sử dụng Google Apps Script để mô phỏng header của trình duyệt thật. Truy cập Extensions > Apps Script và thử hàm này:

function customFetch(url) {
  const options = {
    'muteHttpExceptions': true,
    'headers': {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/115.0.0.0'
    }
  };
  const response = UrlFetchApp.fetch(url, options);
  return response.getContentText();
}

Script này thường có thể vượt qua các cơ chế phát hiện bot cơ bản vốn chặn các công thức tiêu chuẩn. Tuy nhiên, hãy lưu ý rằng Google Apps Script có giới hạn thời gian thực thi là 30 giây và giới hạn tải xuống 10MB cho mỗi yêu cầu.

Sử dụng API ProxyĐối với các trang web có tính bảo mật cao (như Amazon), bạn cần một proxy có khả năng render JavaScript. Các dịch vụ như ScraperAPI hoặc Zenscrape sẽ xử lý các công việc phức tạp này. Họ tải trang, chạy JS và trả về mã HTML hoàn chỉnh cho bạn. Công thức của bạn sẽ trông như thế này:

=IMPORTXML("http://api.scraperapi.com?api_key=KHOA_CUA_BAN&url=" & ENCODEURL("https://amazon.com/url-san-pham"), "//span[@id='priceblock_ourprice']")

Kiểm tra cuối cùngSau khi bạn nghĩ rằng mình đã sửa xong, hãy kiểm tra tính ổn định. Google Sheets lưu bộ nhớ đệm (cache) kết quả IMPORTXML trong khoảng 2 giờ. Nếu bạn muốn buộc làm mới để xem bản sửa lỗi có thực sự hoạt động hay không, hãy thêm một số ngẫu nhiên vào cuối URL của bạn:

=IMPORTXML("https://example.com/trang?refresh="&RANDBETWEEN(1,1000), "//h1")

Nếu lỗi vẫn còn, hãy kiểm tra xem trang web có nguồn cấp dữ liệu RSS hay không. Sử dụng =IMPORTFEED(url) đáng tin cậy gấp 10 lần so với việc cào dữ liệu (scraping) HTML và sẽ giúp bạn tiết kiệm hàng giờ gỡ lỗi về lâu dài.

Related Error Notes