【问题标题】:Importing book names from goodreads.com into Google Sheets with ImportXML gives "Import Internal Error" sometimes使用 ImportXML 将来自 goodreads.com 的书名导入 Google 表格有时会出现“导入内部错误”
【发布时间】:2019-11-26 00:35:12
【问题描述】:

我有一个公式可以从 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 提供了“导入内部错误”提示,而不是书名。不起作用的 id 是:

48332548
35906922

如何使它适用于所有书籍?

发布了许多关于“导入内部错误”问题的问题。我尝试了一些解决方案,包括将公式复制到新表中,但没有奏效。

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

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

那些不同的XPath 公式与原始XPath 公式的作用相同。他们使用与原始 ID 相同的 ID 正确工作,并为与原始 ID 相同的 ID 生成 N/As。

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

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

48213012
48213092

我尝试复制示例电子表格以查看它是否解决了问题。复制示例电子表格中的行为与原始示例电子表格相同 - 仅在上面指定的两个 gr_id 存在问题。

【问题讨论】:

标签: xpath google-sheets import google-sheets-formula google-sheets-importxml


【解决方案1】:

如果您在这两个 ID 上运行完整的 IMPORTXML,您会发现它根本不会返回任何内容:

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

这意味着 Google 表格由于某种原因无法访问 XML 内容(可能类似于 https://stackoverflow.com/a/24891676/5632629

因此,我们可以尝试使用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"))

【讨论】:

  • 感谢您的回答。这修复了示例数据,但是当我向表中添加更多数据时,许多单元格将永远显示“正在加载...”。即使在我删除了所有新添加的数据并重新启动计算机之后,“正在加载...”的问题仍然存在。 25180026 goodreads.com/book/show/25180026 Loading... 48850358 goodreads.com/book/show/48850358 Loading... 这是一个更新的示例电子表格,其公式基于 IMPORTDATA() docs.google.com/spreadsheets/d/…
  • 在 IMPORTDATA() 文档中还有一条注释说“单个电子表格最多支持 50 个 IMPORTDATA 调用”support.google.com/docs/answer/3093335
  • @AndrejAdamenko 好吧,当然,所有导入公式的调用量都是有限的。每个电子表格有太多它们总是会导致无法全部执行
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多