雅虎财务和YQL在控制台与代码中返回不同的值

时间:2016-07-15 13:05:26

标签: php yql yahoo-api yahoo-finance

我正在尝试从“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]

我可能在这里做错了,但看起来这个查询有效,有时即使我保持不变也是如此。

1 个答案:

答案 0 :(得分:0)

发生了什么事?

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

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

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

然而,当您的PHP服务器执行请求时,它仍然需要等待其余的,并且它不会。因此,您的YQL查询最终会使用不完整的HTML运行。

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

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

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

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

我现在该怎么办?

总的来说,我相信如果你想进行HTML抓取,你需要使用其他工具。

我相信如果你能确保使用服务器获得完整的HTML下载,那么解析它应该很容易。

所以我建议采取两个步骤:

  1. 发出http GET请求How to send a GET request from PHP?
  2. 解析html http://htmlparsing.com/php.html
  3. 不可否认,有许多图书馆和许多方法可以实现这两个目标,但我认为这足以让你开始。