Google Sheet 中 ImportXML 的返回值与雅虎财经上的实际值不同

问题描述

我正在尝试使用 ImportXML 将 Yahoo Finance 中的期权价格导入到我的 Google 表格中,但 Google 表格中收到的某些价格的实际值与我在 Yahoo Finance 网站上看到的非常不同。我什至尝试过 ImportHTML,结果是一样的。

Google 表格中使用的公式:

=TRANSPOSE(IMPORTXML( "https://finance.yahoo.com/quote/KL220121C00045000?p=KL220121C00045000","//tr"))

这是 Google Sheet 中的结果(所有红色单元格都是不同的值):

enter image description here

雅虎财经页面上的实际值:

enter image description here

我完全不知道为什么会发生这种情况以及如何解决它。

解决方法

@Tanaike 指向 ImportXML not producing correct values 的链接回答了如何使用应用脚本解决该问题。


为了回答“为什么”的问题,我相信雅虎财经已经实施了某种user agent detection,例如来自 Google Spreadsheets 的请求,或者更具体的使用用户代理 Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com) 的请求将被处理数据的不同(我相信较旧)版本。

当我在浏览器中访问链接 https://finance.yahoo.com/quote/KL220121C00045000?p=KL220121C00045000 时,它当前显示

As of 3:17PM EST. Market open

但是当我change my user agent模仿 Google 表格时,我得到

As of 10:43AM EST. Market open.

IMPORTXML 的结果相同。

我猜他们实施这个是为了减少从自动电子表格中获取数据,或者阻止人们使用 Google 表格抓取他们的网站。