由于某些播放器没有特定列的值(例如:“Rec/Br”),直接转换IMPORTXML返回的数据会产生一个乱码表。
2 个解决方案:
A) 使用IMPORTFROMWEBaddon(免费计划中请求数量有限)激活JS 渲染并使用基本选择器选项来保持数据结构。数据所需的 XPath 表达式:
/th/a
/td[@data-stat="team"]
/td[@data-stat="targets"]
/td[@data-stat="rec"]
/td[@data-stat="rec_yds"]
/td[@data-stat="rec_first_down"]
/td[@data-stat="rec_air_yds"]
/td[@data-stat="rec_air_yds_per_rec"]
/td[@data-stat="rec_yac"]
/td[@data-stat="rec_yac_per_rec"]
/td[@data-stat="rec_broken_tackles"]
/td[@data-stat="rec_broken_tackles_per_rec"]
/td[@data-stat="rec_drops"]
/td[@data-stat="rec_drop_pct"]
对于标题:
//div[@id="div_receiving_advanced"]//th[contains(@class,"poptip")]
对于基本选择器:
//div[@id="div_defense_advanced"]//tr[@data-row][not(@class)]
C6 中使用的公式:
IMPORTFROMWEB(B1;B2:O2;B3:C4)
输出:
旁注:IMPORTFROMWEB 经常输出加载错误。
B) 使用IMPORTDATA 和公式生成表格。首先,我们使用过滤器 (QUERY) 加载感兴趣的数据。然后我们用SUBSTITUTE 修复空白单元格问题。之后,我们使用REGEXEXTRACT 提取数据。最后,我们应用最后一个过滤器和SPLIT 数据来填充单元格。
公式:
=ARRAYFORMULA(SPLIT(QUERY(ARRAYFORMULA(REGEXREPLACE(ARRAYFORMULA(SUBSTITUTE(QUERY(IMPORTDATA(B3);"select Col1 where Col1 contains 'rec_broken_tackles_per_rec'");"></td>";">0</td>"));".+htm.+?>(.+?)<.+team.+([A-Z]{3}).+targets.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+?rec.+?>(.+?)<.+";"$1;$2;$3;$4;$5;$6;$7;$8;$9;$10;$11;$12;$13;$14"));"select * WHERE NOT Col1 contains '<'");";"))
输出:
在这两种情况下,空白单元格都替换为0。
我的工作簿是here。
编辑:
对于带有IMPORTDATA 的“高级防御表”:
=ARRAYFORMULA(SPLIT(QUERY(ARRAYFORMULA(REGEXREPLACE(ARRAYFORMULA(SUBSTITUTE(QUERY(IMPORTDATA(B3);"select Col1 where Col1 contains 'def_tgt_yds_per_att'");"></td>";">0</td>"));".+htm.+?>(.+?)<.+team.+([A-Z]{3})<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?def.+?>(.+?)<.+?bli.+?>(.+?)<.+?qb_.+?>(.+?)<.+?qb_.+?>(.+?)<.+?sac.+?>(.+?)<.+?pre.+?>(.+?)<.+?tac.+?>(.+?)<.+?tac.+?>(.+?)<.+?tac.+?>(.+?)<.+";"$1;$2;$3;$4;$5;$6;$7;$8;$9;$10;$11;$12;$13;$14;$15;$16;$17;$18;$19;$20;$21;$22"));"select * WHERE NOT Col1 contains '<'");";"))
输出: