问题描述
我想将数据从HTML页面(特别是https://www.warzone.com/MultiPlayer/Tournament?ID=34581)导入Google表格中。通常,这可以通过使用IMPORTHTML
(或者以更狡猾的方式,IMPORTXML
或IMPORTDATA
来实现)。
我想从the URL above的“玩家”选项卡中获得桌子的内容。在我的工作表中,它看起来应该像(带有|的分隔单元格)
Accepted Player | Team | Rank | Wins | Losses | In-progress
JSA | | 1st place | 6 | 0 | 0
hexe1309 | | 2nd place | 5 | 1 | 0
Sebus Maximus | | 3rd place | 3 | 3 | 0
Master Jz | | 4th place | 2 | 4 | 0
Blortis | | 5th place | 2 | 4 | 0
Rex Paul of Lizardino | | 6th place | 2 | 4 | 0
Benjamin628 | | 7th place | 1 | 5 | 0
但是当我运行IMPORTHTML(<the URL>,"table",2)
时,我只会得到第一行:
Accepted Player | Team | Rank | Wins | Losses | In-progress
如果我使用IMPORTXML
或IMPORTDATA
,我仍然不会从填充的表中获得任何内容,仅是列标题。
如果您在上面的URL上查看页面源,您会注意到,并非巧合,仅填充了此表的一部分。问题是,查询感兴趣的页面时发出的初始请求会返回一个模板,即带有空表的页面。因此,IMPORTHTML
,IMPORTXML
和IMPORTDATA
返回一个页面,其中包含仅填充了标题但没有内容的表。
空表还没有我想要的数据; 那个被一些jQuery代码填充。大概是jQuery代码是在填充表之前从某个地方获取数据的,但是我没有在浏览器的“网络”选项卡中看到与此相对应的任何请求。我不了解Web应用程序如何工作或如何确定从何处获取此数据。
从我的角度来看,我的选择是:
我猜想#2更可行,因为IMPORTHTML
/ IMPORTXML
/ IMPORTDATA
并不那么复杂。对于#2,我没有调试知识来跟踪该网站的jQuery代码(或找到获取数据以填充表的位置)。我是否可以使用任何devtools(在Firefox或Chrome中)来了解在幕后发生的情况,以获取此数据并在工作表中复制该逻辑? (我的主要差距几乎可以肯定是我对如何获取此数据以及在何处查找此获取的痕迹不了解。)
n.b .:只需使用脚本更新工作表,就可以很容易地做到这一点。我可能最终会使用Python和gspread进行此操作。但是我想知道仅在Google表格中是否真的不可能/不可行。
解决方法
Google表格不能用作无头浏览器,因为IMPORTDATA / IMPORTHTML / IMPORTXML仅能查看URL指向的源代码,它们看不到链接的资源,也看不到所生成的DOM。通过加载和其他事件执行JavaScript。
此外,如果不使用Google Apps脚本或Google Sheets API和您喜欢的编程语言,则Google Sheets将无法运行/复制jQuery的功能。
如TheMaster所述,如果您愿意使用Google Apps脚本,那么直接的方法是使用提供您所查找内容的API,但您也可以尝试复制jQuery发出的HTTP请求。这可以通过使用Google Apps脚本网址提取服务来完成。