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

如何在Google Sheet单工作表中抓取424页共4231行数据

解决Google Sheets批量抓取多页数据的方案

方法1:数组公式结合分页URL(快速实现,适合小批量页数)

IMPORTHTML本身不支持自动分页抓取,我们可以通过构造带分页参数的URL,结合MAP函数批量调用该公式。

目标网站的分页参数为page,例如第2页的URL是https://www.screener.in/screens/41109/all-stocks/?page=2。使用以下公式生成全量页码的抓取请求:

=MAP(SEQUENCE(424), LAMBDA(page, IMPORTHTML("https://www.screener.in/screens/41109/all-stocks/?page="&page, "table")))

注意事项:

  • 一次性发起424次IMPORTHTML请求可能触发Google Sheets性能限制,建议分批执行(例如先抓取1-100页,再处理后续页码)。
  • 若返回结果出现错位或空行,可手动调整公式范围或分批合并数据。

方法2:Google Apps Script(稳定高效,适合大规模页数)

针对424页的海量数据,脚本方案能避免公式的性能瓶颈,同时灵活处理反爬限制。

操作步骤:

  1. 打开目标Google Sheet,点击顶部菜单栏扩展程序 > Apps 脚本。
  2. 删除默认代码,粘贴以下脚本:
function fetchAllStockData() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const baseUrl = "https://www.screener.in/screens/41109/all-stocks/?page=";
  const totalPages = 424;
  
  // 可选:清空现有数据,按需注释或保留
  sheet.clearContents();
  
  for (let page = 1; page <= totalPages; page++) {
    const url = baseUrl + page;
    try {
      const response = UrlFetchApp.fetch(url);
      const html = response.getContentText();
      const doc = HtmlService.createHtmlOutput(html).getContent();
      
      // 定位目标表格(若页面有多个表格,需调整选择器,如"table.table-name")
      const table = doc.querySelector("table");
      if (!table) {
        console.log(`第${page}页未找到表格,跳过`);
        continue;
      }
      
      const rows = table.querySelectorAll("tr");
      const data = [];
      
      rows.forEach((row, index) => {
        // 第一页保留表头,后续页面跳过重复表头
        if (page > 1 && index === 0) return;
        const cells = row.querySelectorAll("td, th");
        const rowData = Array.from(cells).map(cell => cell.textContent.trim());
        data.push(rowData);
      });
      
      // 将数据追加到工作表末尾
      if (data.length > 0) {
        const lastRow = sheet.getLastRow();
        sheet.getRange(lastRow + 1, 1, data.length, data[0].length).setValues(data);
      }
      
      // 延迟1秒,避免触发网站反爬机制
      Utilities.sleep(1000);
    } catch (error) {
      console.log(`抓取第${page}页失败:${error.message}`);
      // 遇错暂停5秒后继续
      Utilities.sleep(5000);
    }
  }
  
  SpreadsheetApp.getUi().alert("数据抓取完成!");
}
  1. 点击脚本编辑器顶部保存,命名项目(如"StockDataFetcher")。
  2. 点击运行,首次运行需完成权限授权,按提示操作即可。
  3. 等待脚本执行完成,完成后会弹出提示,工作表将填充所有页面的数据。

注意事项:

  • 可根据网站反爬强度调整延迟时间(如将1000改为2000,即2秒)。
  • 若页面表格结构变更,需修改querySelector的参数(指定表格类名或ID)。
  • 若数据量过大,可拆分totalPages为多个批次(如先跑1-100页,再跑101-200页),避免脚本超时。

内容的提问来源于stack exchange,提问作者Solanki Rajesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:00:39