【问题标题】:Finding a table using ImportHTML使用 ImportHTML 查找表
【发布时间】:2022-01-25 04:20:04
【问题描述】:

我觉得我已经尝试了这里的所有解决方案,但还没有完成这项任务。

我正在寻找在此链接上的 SECOND(季后赛)表:

https://www.basketball-reference.com/players/c/curryst01/gamelog/2016

使用 IMPORTHTML 很容易进入第一个表,但我无法找到第二个表。

我已经尝试将 IMPORTHTML 用于 100 个不同的表格和列表。我还查看了检查器并在

我读到这可能是因为它是一个 Javascript 对象,但是当我关闭 Javascript(就像有人建议的那样)时,我仍然看到该表,这让我相信它绝对可以被抓取到 Google 表格中。

我也尝试过 ImportXML,但我不太熟悉,也无法找到相关信息。

对我如何抓取这个有什么建议吗?这么难,我觉得很奇怪!

【问题讨论】:

    标签: google-apps-script google-sheets import google-sheets-formula


    【解决方案1】:

    不幸的是,IMPORTHTML 和 IMPORTXML 似乎不能用于检索您期望的表。但是,幸运的是,我注意到当 Google Apps Script 检索 HTML 时,HTML 数据中包含您期望的 the SECOND (playoffs) table 表。所以在这个答案中,我想建议使用 Google Apps Script。

    示例脚本:

    请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器和 please enable Sheets API at Advanced Google services。并且,请在脚本编辑器中运行 myFunction。这样,将检索到的表放入工作表中。

    function myFunction() {
      const url = "https://www.basketball-reference.com/players/c/curryst01/gamelog/2016"; // This URL is from your question.
      const sheetName = "Sheet1";  // Please set the destination sheet name.
    
      const html = UrlFetchApp.fetch(url).getContentText();
      const tables = [...html.matchAll(/<table[\s\S\w]+?<\/table>/g)];
      if (tables.length > 8) {
        const ss = SpreadsheetApp.getActiveSpreadsheet();
        Sheets.Spreadsheets.batchUpdate({ requests: [{ pasteData: { html: true, data: tables[8][0], coordinate: { sheetId: ss.getSheetByName(sheetName).getSheetId() } } }] }, ss.getId());
        return;
      }
      throw new Error("Expected table cannot be retrieved.");
    }
    

    结果:

    运行此脚本,可以得到如下结果。

    参考资料:

    【讨论】:

    • 非常感谢 - 这正在努力拉入第二张桌子。我将尽我所能对其进行调整,以便我可以同时拉出两张桌子。我的最终目标是抓取整个 URL 列表以获取所有信息。我现在正在使用 ParseHub 这样做,但如果我可以稍微改变一下它会更容易。你有什么建议吗?这太棒了!
    • @Anthony Madle 感谢您的回复。我很高兴你的问题得到了解决。关于您对My end goal is to scrape an entire list of URLs to get all of the info. 的附加问题,在这种情况下,我建议的脚本使用tables[8][0] 来检索您要检索的第二个表。比如修改tables[8][0]怎么样?这样,您可以检索其他表。但我不确定My end goal 的细节。所以如果这没有用,我很抱歉。
    • @Anthony Madle 顺便说一句,如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • 嘿@Tanaike - 我试图通过给它一个向上的箭头来接受你的答案,但我无法没有 15 个声望点。还有其他方法吗?另外——我试图将batchupdate行复制成两行,这样我就可以在同一张表上同时拉出表7和表8,但这似乎不起作用。我绝对可以解决它,这是一个巨大的帮助。真的,我有大约 50 个链接想要获取此信息 - 我打算将链接复制并粘贴到此代码中 50 次,只是想知道是否有更好的方法?
    • @Anthony Madle 感谢您的回复。我带来的不便表示歉意。您可以在 meta.stackexchange.com/a/65088 查看如何接受您的回答。并且,关于I was going to copy and paste the links into this code 50 times, just curious if there is a better way?,需要发布脚本。但是您的新问题与您的这个问题不同。那么,您可以通过包含更多信息将其作为一个新问题发布吗?这样,它将帮助包括我在内的用户想到示例脚本。如果你能合作解决你的新问题,我很高兴。可以配合吗?
    【解决方案2】:

    我了解到我没有正确关闭 Javascript……好吧,现在桌子不见了。所以我假设这意味着它不能被刮到表格中。

    仍然好奇有什么解决方案 - 我目前正在使用 ParseHub 进行研究,但我真的很想了解如何在 Sheets 中完成它

    【讨论】:

      【解决方案3】:

      试试这个,它会给你主表

      =importhtml(url,"table",8)
      

      您还可以检索表 #1 到 #7 的信息

      【讨论】:

      • 谢谢 Mike - 不过我正在努力争取季后赛席位
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多