GDocs ImportHTML/XML 没有得到正确的数据

GDocs ImportHTML/XML not getting proper data

我有一个简单的 Google 电子表格问题。我正在尝试拉入 table,但使用 ImportHTML 时运气不佳,它只会拉出第一个顶部单元格并以某种方式复制它。我还尝试了 ImportXML,使用 XPath Helper 获取正确的 XPath,它也不会加载正确的 table 数据。

Google 文档:

https://docs.google.com/spreadsheets/d/1-toAivOhywZuErHK0LB5EADiMu_T9ZNUTgMhqFRBHOU/edit?usp=sharing

我需要的是以下站点的底部 table(id='player_gbs'):

http://www.forge-db.com/us/us18/players/profile/?server=us18&world=Sinerania&id=12497

Code Snippet

这是我迄今为止尝试过的方法,这些在 GDoc 中也都有体现。

=ImportHTML(B1, "table", 2)

Returns 下面一行两次: "Great Building Era Lvl FP Req. FP FP Left 24h +"

=ImportXML(B1, "/html/body/div[@class='wrap']/div[@class='content'][2]/div[@class='b-box']")

Returns:

"GB's with a new level in the last 24 hours are shown with a yellow background" Great BuildingEraLvlFPReq. FPFP Left24h +Great BuildingEraLvlFPReq. FPFP Left24h +"

认为问题是包含在 /div 中的是 <thead> and <tfoot> before <tbody> 所以我尝试了这个 XPath 并得到了 N/A:

=ImportXML(B1, "/html/body/div[@class='wrap']/div[@class='content'][2]/div[@class='b-box']/div[@id='player_gbs_wrapper']/table[@id='player_gbs']/tbody")

我认为您的问题是 table 是通过 JSON 和 javascript 创建的。如果您在该页面上查看源代码,您会看到这个块...

<script type="text/javascript" class="init">
$(document).ready(function() {
    $('#player_gbs').dataTable( {
        "aLengthMenu": [[30], ['All']],
        "processing": true,
        "serverSide": true,
        "ajax": "../../getPlayerGBs.php?id=12497&server=us18",

这告诉我们数据来自以下URL。 http://www.forge-db.com/us/us18/getPlayerGBs.php?id=12497&server=us18

URL 正在提供填充 table 的数据。

此脚本 (based off this SO response) 将解析来自该提要的数据并将其写入 sheet 标题为 dataImport。它只获取前两个数据块,你只需扩展循环来做更多的事情。

function urlDownload() {
var dataImport = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('dataImport');
var apiPoint = "http://www.forge-db.com/us/us18/getPlayerGBs.php?id=12497&server=us18";
var response = UrlFetchApp.fetch(apiPoint);
var response_json = JSON.parse(response.getContentText()); 
var length = response_json.data.length;
var a = [];
for(i=0; i<length; i++){
  dataImport.getRange(i+2, 1, 1, 1).setValue(response_json.data[i][0])
  dataImport.getRange(i+2, 2, 1, 1).setValue(response_json.data[i][1])

 }
}