Google Sheets使用IMPORTHTML抓取ESPN足球数据时列项不全的咨询
ESPN足球积分榜抓取结果拆分的整合方案
ESPN的英超积分榜页面为了实现横向滚动时固定球队名列的交互效果,刻意把原本的整表拆成了两个独立的HTML <table> 分别渲染,这就是IMPORTHTML公式只能抓到半张表的核心原因,不需要额外爬取工具,用以下两种方式就能拿到完整全量数据:
纯公式快速拼接
两个抓取结果的行顺序完全对应,不存在基础的行匹配偏差,直接用HSTACK函数横向合并两个抓取结果即可,在你要放完整表格的起始单元格输入:
=HSTACK( IMPORTHTML("https://www.espn.in/soccer/table/_/league/eng.1","table",1), IMPORTHTML("https://www.espn.in/soccer/table/_/league/eng.1","table",2) )
- 合并后如果出现重复列(比如排名值在两个表中重复出现),搭配
QUERY函数把第二个抓取结果里的冗余列删掉就行。举个例子,如果发现table2的第一列和table1的最后一列都是排名字段,就把table2的抓取部分改写为QUERY(IMPORTHTML("https://www.espn.in/soccer/table/_/league/eng.1","table",2), "select Col2,Col3,Col4,Col5", 1),按需选择需要保留的数值列。 - 如果你的Google Sheets版本不支持
HSTACK,可以把两个抓取结果分别放在两个相邻的空白区域,按行顺序手动把列拼接起来,不需要高级函数也能实现同样效果。
自定义脚本稳定抓取
IMPORTHTML的原生逻辑是把页面上所有独立的<table>标签作为单独的抓取数据集,对这种刻意拆分前端结构的页面适配性很差。可以通过Google Sheets的Apps Script写一个简单的自定义函数,直接定位页面上包裹两个拆分table的父级容器,把容器下所有行列的内容按顺序提取出来,从根源上避免表被拆分的问题,抓取结果会和页面上展示的完整表格完全一致。
常见问题排查
- 如果合并后出现行错位,优先检查两个抓取结果里是否混进了升降级提示的分隔空行,用
FILTER函数把两个数据集里的空值行过滤掉再拼接即可解决。 - 注意IMPORTHTML的调用频率限制,建议把抓取结果的刷新间隔设置在1小时以上,避免触发目标站点的反爬机制导致抓取失败。
内容的提问来源于stack exchange,提问作者kcm
相关产品推荐
相关产品推荐

