You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用IMPORTXML规避滚动加载限制,批量导入商品到谷歌表格

解决无限滚动网站的商品数据导入问题

核心问题原因

IMPORTXML仅能抓取页面首次加载的静态HTML内容,而目标网站的商品采用滚动加载(无限滚动)模式,后续商品是通过AJAX动态请求加载的,不会出现在初始HTML中,因此无法直接用IMPORTXML获取全部数据。

解决方案:使用Google Apps Script抓取动态内容

步骤1:优先查找商品加载API

  1. 打开浏览器开发者工具(F12),切换到「Network」标签页
  2. 滚动商品页面,观察「XHR」或「Fetch」类型的请求,找到加载商品列表的API接口(通常带有page、offset、limit等参数,返回JSON格式数据)
  3. 记录该API的请求格式(URL、请求头、参数规则)

步骤2:编写Google Apps Script脚本

  1. 打开目标谷歌表格,点击「扩展程序」→「Apps脚本」
  2. 删除默认代码,粘贴以下适配后的脚本(需根据找到的API调整参数):
function fetchAllProducts() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('Sheet1'); // 替换为存放分类链接的工作表名
  const targetSheet = ss.getSheetByName('Sheet2'); // 替换为存放结果的工作表名
  const categoryUrls = sourceSheet.getRange('E2:E').getValues().filter(row => row[0]);
  
  const output = [];
  const headers = ['Name', 'Qty', 'Art', 'Price'];
  output.push(headers);
  
  // 遍历每个分类链接
  categoryUrls.forEach(([url]) => {
    let offset = 0;
    const limit = 20; // 单次加载的商品数量,根据网站API调整
    let hasMore = true;
    
    while (hasMore) {
      try {
        // 构造API请求URL,替换为你找到的实际接口
        const apiUrl = `${url}?offset=${offset}&limit=${limit}`;
        const response = UrlFetchApp.fetch(apiUrl, {
          headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
          },
          muteHttpExceptions: true
        });
        
        if (response.getResponseCode() !== 200) {
          hasMore = false;
          break;
        }
        
        const data = JSON.parse(response.getContentText());
        // 替换为API返回数据中对应的字段名
        const products = data.items || data.products || [];
        
        if (products.length === 0) {
          hasMore = false;
          break;
        }
        
        products.forEach(product => {
          output.push([
            product.title || product.name,
            product.stock || product.qty,
            product.article || product.art,
            product.price || product.price_formatted
          ]);
        });
        
        offset += limit;
        Utilities.sleep(1000); // 添加请求间隔,避免触发反爬
      } catch (e) {
        console.log(`处理链接${url}时出错: ${e.message}`);
        hasMore = false;
      }
    }
  });
  
  // 清空目标表并写入数据
  targetSheet.clearContents();
  if (output.length > 0) {
    targetSheet.getRange(1, 1, output.length, output[0].length).setValues(output);
  }
}
  1. 保存脚本,点击「运行」,首次运行需授权谷歌账号权限

备选方案:无API时使用Cheerio解析动态内容

如果找不到API,可导入Cheerio库解析页面内容:

  1. 在Apps脚本中,点击「资源」→「库」,输入Cheerio脚本ID:1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0,添加并设置为最新版本
  2. 修改脚本,模拟多次请求加载更多内容(需分析网站滚动加载的触发逻辑,比如URL参数或请求体参数)

注意事项

  • 部分网站有反爬机制,需设置合理的请求间隔,避免频繁请求
  • 定期检查API接口是否变更,若网站更新需调整脚本参数
  • 确保谷歌账号的Apps脚本配额足够,避免一次性请求过多数据导致限制

内容的提问来源于stack exchange,提问作者Dmitriy Amangaliev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:20:32