【问题标题】:Using Google Sheets as a Web Scraper for a Site with Java使用 Google 表格作为具有 Java 的站点的 Web Scraper
【发布时间】:2020-10-07 20:47:12
【问题描述】:

我一直在尝试使用IMPORTXML() 从以下网站抓取信息。

https://libbyapp.com/library/lapl/search/audiobooks/query-john%20scalzi/language-en/page-1

命令没有成功,网上找了一些资料,貌似这个命令是行不通的,因为网站是用java来渲染信息的。

谷歌表格中是否有任何其他命令或方法可以从该网页中抓取一些信息?具体来说,我正在尝试列出前 3 本书的姓名和作者。

【问题讨论】:

    标签: web-scraping google-sheets google-sheets-formula


    【解决方案1】:

    不,不是 Java。 JavaScript。非常不同的东西。

    幸运的是,该网站有一个 JSON API!您可以在浏览器的网络监视器中亲自查看。这意味着没有纯公式,但我们可以编写一个简单的用户脚本(工具 > 脚本编辑器)。

    我们制作这个用户定义的函数(粘贴到编辑器中):

    function getAuthors(url, showHeaders) 
    {
      let jsondata = UrlFetchApp.fetch(url);
      let object   = JSON.parse(jsondata.getContentText());
      
      let bookData = showHeaders ? 
        [ ['Title', 'Author(s)'] ] : 
        [];
    
      bookData = bookData.concat(
          object.items.map(item => (
          // Title is always first, followed by any authors:
          [item.title].concat(
            item.creators
              // Add more creator roles here:
              .filter(creator => creator.role === 'Author')
              // Take creator's name
              .map(author => author.name)
              // Comma-separated
              .join(',')
          ))
        )
      );
      
      return bookData;
    }
    

    使用网络监视器,我确定感兴趣的 URL 是

    https://thunder.api.overdrive.com/v2/libraries/lapl/media?overdriveFormats=true&mediaType=audiobook&query=john%20scalzi&language=en&page=1&perPage=24&x-client-id=dewey
    

    然后在您的工作表中,您可以使用以下公式:

    =getAuthors(A1)
    

    =getAuthors(A1, 1)
    

    如果你想要标题。

    如果您想要前三个,则只需使用ARRAY_CONSTRAIN 截断表格。

    【讨论】:

    • 感谢 Calculuswhiz,这对我有用!一个问题:我对此有点陌生,所以您能否更详细地解释一下您是如何从网络监视器获取确切 URL 的?
    • @TomDekkard 是的。如果您在浏览器上按 F12,它应该会打开您的开发者工具。您的一个标签可能显示“网络”。如果在监视器打开的情况下导航到页面或刷新页面,它应该捕获所有数据请求。在这种情况下,我通过 XHR 过滤(通常是我在站点后检查的第一件事),并找到返回具有正确数据的响应的 URL。
    猜你喜欢
    • 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
    相关资源
    最近更新 更多