GDocs ImportHTML / XML无法获取正确的数据

时间:2016-08-02 01:14:32

标签: xpath google-sheets google-docs

我有一个简单的Google电子表格问题。我试图拉进一个表并且没有使用ImportHTML,它只会拉出第一个顶级单元并以某种方式复制它。我也尝试使用ImportXML,使用XPath Helper获取正确的XPath,并且它也不会加载正确的表数据。

Google Doc:

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

我需要的是以下网站上的底部表格(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)

两次返回以下行: “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']")

返回:

  

“GB在过去24小时内达到新的水平,显示为黄色   背景“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")

1 个答案:

答案 0 :(得分:1)

我相信你的问题是该表是通过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",

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

该URL提供填充表的数据。

此脚本(based off this SO response)将解析该Feed中的数据并将其写入标题为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])

 }
}