使用 ImportXML 将书名从 goodreads.com 导入 Google Sheets 有时会给出 "Import Internal Error"

Importing book names from goodreads.com into Google Sheets with ImportXML gives "Import Internal Error" sometimes

我有一个公式可以从 goodreads.com:

中获取书名
=IMPORTXML("https://www.goodreads.com/book/show/" & gr_id; "//*[@id='bookTitle']")

其中 gr_id 是包含书籍 ID 的列。例如当gr_id=23848607时,它从URLhttps://www.goodreads.com/book/show/23848607中获取结果是"Warheart".

该公式前段时间运行良好。我没有做任何更改,现在我注意到它对某些书籍停止工作(仍在为其他书籍工作)。现在它给出了 N/A 和 "Import Internal Error" 提示,而不是书名。无效的 ID 是:

48332548
35906922

如何让它适用于所有图书?

有很多关于 "Import Internal Error" 问题的帖子。我尝试了一些解决方案,包括将公式复制到新的 sheet,但没有用。

更新: 我尝试了以下不同的 XPath 公式而不是 "//*[@id='bookTitle']".

"//h1[@id='bookTitle']"
"//h1"

这些不同的 XPath 公式与原始 XPath 公式的效果相同。他们对与原始 ID 相同的 ID 正确工作,并为与原始 ID 相同的 ID 生成 N/As。

更新: 我刚刚重新检查,我的所有公式都适用于所有 gr_ids(自从它们不起作用以来我没有做任何更改。 ) 可能有人知道如何防止他们将来停止工作。

更新: 我重新检查了一次。在所有 gr_ids 中,只有这个现在显示 N\A35906922。我创建了一个example spreadsheet,因为我的工作spreadsheet包含了太多不相关的细节,但是问题并没有出现在示例spreadsheet中。我回到我的工作 spreadsheet 并重新加载它 - 我的工作 spreadsheet 中的问题也消失了。然后我在示例 spreadsheet 中添加了更多测试数据,下面的新示例 gr_ids 显示 N\A:

48213012
48213092

我尝试复制示例传播sheet 以查看它是否解决了问题。复制示例 spreadsheet 中的行为与原始示例 spreadsheet 相同 - 只有上面指定的两个 gr_ids 存在问题。

如果你 运行 完全 IMPORTXML 这两个 ID 你可以看到它 return 根本不会:

=IMPORTXML("https://www.goodreads.com/book/show/48213012-fathers-and-sons", "//*")

这意味着 Google 工作表由于某种原因无法到达 XML 内容(可能类似于

因此我们可以尝试直接使用 IMPORTDATA 阅读源代码,我们可以找到大约 70 个具有相同信息的元素,因此我们选择一个,隔离它并删除 HTML 标签。然后我们只需将先前的公式包装在 IFERROR 中,并强制公式在第一次失败时进行第二次查看。结果是这样的:

=IFERROR(IMPORTXML("https://www.goodreads.com/book/show/"&A:A, "//*[@id='bookTitle']"), 
 REGEXEXTRACT(QUERY(ARRAY_CONSTRAIN(
 IMPORTDATA("https://www.goodreads.com/book/show/"&A:A), 100, 1), 
 "select Col1 where Col1 contains '</title>'"), ">(.*) by"))

IMPORTXML()好像不靠谱。我决定不使用它,因为我没有找到可以接受的解决方案来解决我的问题。我没有使用 IMPORTXML(),而是将我的书从 goodreads.com 导出到 csv 文件(有 goodreads.comfeature),然后导入 csv 文件到我的电子表格中。这不是一个完美的解决方案,因为每次我需要更新书籍时都需要重新导入,但至少它有效。