【问题标题】:Yahoo finance and YQL returning different values in console vs codeYahoo Finance 和 YQL 在控制台与代码中返回不同的值
【发布时间】:2016-07-15 13:05:25
【问题描述】:

我正在尝试从“https://uk.finance.yahoo.com/q/cp?s=%5EFTSE”获取数据

我在 YQL 控制台中使用了select * from html where url = 'https://uk.finance.yahoo.com/q/cp?s=%5EFTSE'YQL console 这似乎正在检索正确的结果。

然后我通过 PHP 执行完全相同的查询,这就是我返回的所有 http://pastebin.com/MDTwh6n7 它缺少我使用的 ['query']['results']['body']['div'][3]

我可能在这里做错了什么,但这个查询似乎有效,有时即使我保持不变也不行。

【问题讨论】:

  • 请直接在此处包含相关代码。

标签: php yql yahoo-api yahoo-finance


【解决方案1】:

发生了什么?

这通常发生在网站动态加载时。如果您使用 Chrome 开发工具并检查“网络”选项卡,您将看到该网页会随着时间的推移执行多个请求,直到您看到完整的结果。

为什么我会得到奇怪的结果?

这是 YQL 的问题。您的查询可能适用于控制台,因为当您使用它时,页面已经完成加载。

但是,当您的 PHP 服务器发出请求时,它仍然需要等待其余的,而它不需要。因此,您的 YQL 查询最终会以不完整的 HTML 运行。

YQL 很好,但仅适用于纯静态 HTML 页面,我认为这里不是这种情况。

如何知道网页是静态的还是动态的?

嗯,没有办法确定,但是 Quora 的这篇文章建议了一些你可以使用的策略:

我自己最近也犯了同样的错误。我认为 wikia 页面是理所当然的,认为它是静态的,但最终它也是动态加载的。

我现在该怎么办?

总的来说,我认为如果您想进行 HTML 抓取,则需要使用其他工具。

我相信,如果您可以确保通过您的服务器获得完整的 HTML 下载,那么解析它应该很容易。

所以我建议两个步骤:

  1. 发出http GET请求How to send a GET request from PHP?
  2. 解析htmlhttp://htmlparsing.com/php.html

诚然,有许多库和许多方法可以实现这两个目标,但我认为这足以让你开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多