我一直试图使用IMPORTXML()
从以下网站中抓取信息。
https://libbyapp.com/library/lapl/search/audiobooks/query-john%20scalzi/language-en/page-1
在使用该命令未成功并进行一些在线挖掘之后,由于该网站使用Java来呈现信息,因此该命令似乎无法使用。
Google表格中是否还有其他命令或方法可以从该网页中抓取一些信息?具体来说,我正在尝试列出前三本书的名称和作者。
答案 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")
,它将在列中显示每本书的所有数据
如果仅需要标题和作者,请使用以下过滤器作为第二个参数:
"/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")