You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Google Sheets中用IMPORTXML导入特殊类网页数据?

解决Google Sheets提取特定类数据的问题

看起来你已经搞定了赛事列的提取,卡在了带特殊类的数值(比如Photo1数量)上,我来帮你一步步解决这个问题。

第一步:定位目标元素的HTML结构

首先得搞清楚这些Photo1数据在页面里的具体标签结构,步骤如下:

  1. 打开目标页面,右键点击你要提取的Photo1数量区域,选择「检查」(Chrome浏览器),调出开发者工具。
  2. 查看对应的HTML代码:比如你会看到这个数据可能在一个带特定class的<td>标签里,或者是在<tr>行的第N个<td>位置里。举个例子,实际页面里可能是这样的结构:
<tr>
  <td><pre>赛事名称</pre></td>
  <td class="photo-stat">Photo1: 4</td>
  <!-- 其他列 -->
</tr>

第二步:用IMPORTXML提取原始数据

根据你找到的结构,编写对应的XPath公式:

  • 如果目标数据在带特定class的td里(比如class是photo-stat),公式如下:
    =IMPORTXML(B7;"//td[@class='photo-stat']")
    
  • 如果目标数据在每行的第2个td(假设赛事列是第1个),公式可以简化为:
    =IMPORTXML(B7;"//tr/td[2]")
    

这个公式会把所有行的对应数据提取到一列里,但内容可能是「Photo1: X」这样的完整文本,还需要拆分出数字。

第三步:拆分出具体数量

REGEXEXTRACT配合ARRAYFORMULA一次性提取所有行的数字:

=ARRAYFORMULA(REGEXEXTRACT(IMPORTXML(B7;"//td[@class='photo-stat']"); "\d+"))

这里的\d+是正则表达式,用来匹配一串数字,ARRAYFORMULA让公式自动应用到所有提取到的行,不用逐个单元格复制。

特殊情况:页面是动态加载的?

如果上面的公式都没效果,大概率是页面用JavaScript动态渲染数据——IMPORTXML只能抓取静态HTML,动态加载的内容它看不到。这时候可以用Google Apps Script来解决:

  1. 打开你的Google表格,点击「扩展程序」→「Apps Script」。
  2. 粘贴下面的代码(记得根据实际HTML结构调整XPath部分):
function fetchIceHockeyStats() {
  // 获取B7里的URL
  const url = SpreadsheetApp.getActiveSheet().getRange("B7").getValue();
  // 抓取页面HTML
  const htmlContent = UrlFetchApp.fetch(url).getContentText();
  // 解析HTML(注意:如果页面结构复杂,可能需要用更灵活的解析方式,比如Cheerio,但默认XmlService也能应付简单结构)
  const xmlDoc = XmlService.parse(htmlContent);
  const root = xmlDoc.getRootElement();
  
  // 遍历所有表格行,提取Photo1数量
  const stats = root.getChildren("body")[0]
    .getChildren("table")[0] // 假设目标表格是页面第一个table,根据实际调整
    .getChildren("tr")
    .map(row => {
      // 找到包含Photo1的td
      const photoTd = row.getChildren("td").find(td => td.getText().includes("Photo1"));
      // 提取数字,没有的话返回空字符串
      return photoTd ? [photoTd.getText().match(/\d+/)[0]] : [""];
    });
  
  // 将结果写入表格,比如从C2开始
  const targetSheet = SpreadsheetApp.getActiveSheet();
  targetSheet.getRange(2, 3, stats.length, 1).setValues(stats);
}
  1. 保存脚本,点击运行按钮,授权后就能把数据批量写入表格了。

内容的提问来源于stack exchange,提问作者Daniel Serrano López

火山引擎 最新活动