如何用IMPORTXML规避滚动加载限制,批量导入商品到谷歌表格
解决无限滚动网站的商品数据导入问题
核心问题原因
IMPORTXML仅能抓取页面首次加载的静态HTML内容,而目标网站的商品采用滚动加载(无限滚动)模式,后续商品是通过AJAX动态请求加载的,不会出现在初始HTML中,因此无法直接用IMPORTXML获取全部数据。
解决方案:使用Google Apps Script抓取动态内容
步骤1:优先查找商品加载API
- 打开浏览器开发者工具(F12),切换到「Network」标签页
- 滚动商品页面,观察「XHR」或「Fetch」类型的请求,找到加载商品列表的API接口(通常带有
page、offset、limit等参数,返回JSON格式数据) - 记录该API的请求格式(URL、请求头、参数规则)
步骤2:编写Google Apps Script脚本
- 打开目标谷歌表格,点击「扩展程序」→「Apps脚本」
- 删除默认代码,粘贴以下适配后的脚本(需根据找到的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); } }
- 保存脚本,点击「运行」,首次运行需授权谷歌账号权限
备选方案:无API时使用Cheerio解析动态内容
如果找不到API,可导入Cheerio库解析页面内容:
- 在Apps脚本中,点击「资源」→「库」,输入Cheerio脚本ID:
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0,添加并设置为最新版本 - 修改脚本,模拟多次请求加载更多内容(需分析网站滚动加载的触发逻辑,比如URL参数或请求体参数)
注意事项
- 部分网站有反爬机制,需设置合理的请求间隔,避免频繁请求
- 定期检查API接口是否变更,若网站更新需调整脚本参数
- 确保谷歌账号的Apps脚本配额足够,避免一次性请求过多数据导致限制
内容的提问来源于stack exchange,提问作者Dmitriy Amangaliev
相关产品推荐
相关产品推荐

