将Google表格用作Java网站的网络抓取工具

时间:2020-10-07 20:47:12

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

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

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

在使用该命令未成功并进行一些在线挖掘之后,由于该网站使用Java来呈现信息,因此该命令似乎无法使用。

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

2 个答案:

答案 0 :(得分:0)

不,不是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来截断表。

答案 1 :(得分:0)

使用API​​绝对是必经之路

ImportJSON是最简单的解决方案。 它不是本机功能,但可以在此处安装(在免费计划中有一些限制): https://gsuite.google.com/marketplace/app/importjson_json_to_table_from_any_source/782573720506

然后键入

=IMPORTJSON("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", "/items")

,它将在列中显示每本书的所有数据

enter image description here

如果仅需要标题和作者,请使用以下过滤器作为第二个参数: "/items/title, /items/creators/0/name, /items/creators/1/name" 像这样

=IMPORTJSON("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", "/items/title, /items/creators/0/name, /items/creators/1/name")

返回: enter image description here