我一直在尝试使用IMPORTXML()从以下网站抓取信息。
https://libbyapp.com/library/lapl/search/audiobooks/query-john%20scalzi/language-en/page-1
在命令没有成功和一些在线挖掘之后,这个命令似乎不会起作用,因为网站使用java来呈现信息。
在google sheets中有没有其他命令或方法可以从这个网页中抓取一些信息?具体地说,我想知道前3本书的名字和作者。
发布于 2020-10-08 09:35:18
不,不是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截断表即可。
https://stackoverflow.com/questions/64252076
复制相似问题