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

如何使用Apps Script抓取OLG网站动态渲染的彩票奖池数据?

解决OLG动态渲染彩票数据抓取问题的可行方案

由于目标数据是JavaScript动态渲染的,ImportXML和普通UrlFetchApp调用只能获取静态HTML,无法拿到实际展示的开奖金额。以下是三种可行的解决方法:

1. 用Apps Script + Google Cloud Function + Puppeteer渲染页面

这种方法通过无头浏览器完整渲染页面后提取数据,兼容性最强:

步骤1:创建Cloud Function(处理渲染和抓取)

在Google Cloud控制台创建HTTP触发的Cloud Function,使用Node.js环境,安装puppeteer依赖,代码如下:

const puppeteer = require('puppeteer');

exports.scrapeOLGJackpots = async (req, res) => {
  const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
  const page = await browser.newPage();
  // 等待页面完全渲染
  await page.goto('https://www.olg.ca/en/home.html', { waitUntil: 'networkidle2' });

  // 提取目标数据
  const results = await page.evaluate(() => {
    return {
      lottoMax: {
        jackpot: document.querySelector('[data-testid="lotto-max-jackpot"]')?.textContent.trim() || 'N/A',
        maxMillions: document.querySelector('[data-testid="max-millions-count"]')?.textContent.trim() || 'N/A'
      },
      lotto649: {
        goldBallJackpot: document.querySelector('[data-testid="lotto-649-gold-ball-jackpot"]')?.textContent.trim() || 'N/A'
      },
      lottario: {
        jackpot: document.querySelector('[data-testid="lottario-jackpot"]')?.textContent.trim() || 'N/A'
      }
    };
  });

  await browser.close();
  res.json(results);
};

步骤2:在Google Sheets的Apps Script中调用云函数

部署Cloud Function后,复制其HTTP触发URL,在Sheet的脚本编辑器中编写调用函数:

function getOLGJackpotData() {
  const cloudFuncUrl = '替换为你的Cloud Function HTTP URL';
  const response = UrlFetchApp.fetch(cloudFuncUrl);
  const data = JSON.parse(response.getContentText());

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 写入数据到指定单元格
  sheet.getRange('A1').setValue(`LottoMax头奖: ${data.lottoMax.jackpot}`);
  sheet.getRange('A2').setValue(`Max Millions数量: ${data.lottoMax.maxMillions}`);
  sheet.getRange('A3').setValue(`Lotto649金球奖: ${data.lotto649.goldBallJackpot}`);
  sheet.getRange('A4').setValue(`LOTTARIO头奖: ${data.lottario.jackpot}`);
}

2. 挖掘OLG内部API(最高效方案)

OLG官网的动态数据大概率来自内部API,可通过浏览器开发者工具找到:

  1. 打开目标页面,按F12打开开发者工具,切换到Network面板
  2. 刷新页面,筛选Fetch/XHR类型的请求,查找返回彩票开奖数据的接口(通常路径包含jackpot、lottery等关键词)
  3. 找到接口后,直接用UrlFetchApp调用获取结构化JSON数据

示例代码(假设找到API端点):

function fetchOLGAPIData() {
  const apiEndpoint = '替换为你找到的OLG内部API URL';
  const response = UrlFetchApp.fetch(apiEndpoint);
  const jackpotData = JSON.parse(response.getContentText());

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 根据API返回的结构提取数据,以下为示例,需对应实际字段
  sheet.getRange('A1').setValue(`LottoMax头奖: ${jackpotData.lottoMax.jackpot}`);
  sheet.getRange('A2').setValue(`Max Millions: ${jackpotData.lottoMax.maxMillions}`);
  sheet.getRange('A3').setValue(`Lotto649金球奖: ${jackpotData.lotto649.goldBall}`);
  sheet.getRange('A4').setValue(`LOTTARIO头奖: ${jackpotData.lottario.jackpot}`);
}

3. 使用支持JS渲染的第三方抓取工具(简化方案)

如果不想搭建Cloud Function,可使用支持动态页面渲染的抓取工具生成目标页面的静态快照,再用IMPORTHTML提取数据。注意选择可信工具,避免数据泄露风险。


内容的提问来源于stack exchange,提问作者T White

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:03:12