2011-08-24 40 views
0

我想抓住从站点上的某些财务数据一样http://www.fxstreet.com/rates-charts/currency-rates/抢网站内容,那不是在源代码

到现在我使用liburl抓住源代码和一些正则表达式搜索,获得的数据,这是我后来存储在一个文件中。

还有一点问题: 在浏览器中看到的页面上,数据几乎每秒都会更新一次。当我打开源代码时,我正在查找的数据每两分钟更改一次。 所以我的程序只能获得数据的时间分辨率要低得多。

我有两个问题:

(我)这怎么可能是一个源代码,其在两分钟内仍然静态产生变化,每一个第二表?什么是机制? (ii)如何以第二次时间分辨率获得数据,即如何读出源代码中未显示的这种变化表。

在此先感谢, 大卫

回答

1

您可以使用网络面板FireBug检查所发出的HTTP请求(通常获取的数据),而页面打开。您引用的这个特定页面似乎是将POST请求发送到http://ttpush.fxstreet.com/http_push/,然后接收并解析JSON响应。

+0

好吧,这似乎是我的问题(我)的答案 - 页面使用JSON或随你。那么问题(ii)如何检索数据?谢谢 – davidhigh

1

尝试发送POST请求http://ttpush.fxstreet.com/http_push/connect,看看你会得到什么

它会不断加载新数据

编辑:

可以使用liburl或蟒蛇,它其实并不重要。在HTTP下,当您浏览网页时,您会发送GET或POST请求。 进入网站,打开开发工具(Chrome)/ firebug(firefox插件),你会看到所有的数据加载后,有一个请求没有关闭 - 它保持打开状态。

当你有一个网站,你要不断地获取数据,你可以做到这一点的一些技巧:

  • 使单独的请求(使用AJAX)每隔几秒钟 - 这将打开每个连接请求,并且如果您想要频繁更新数据 - 这是浪费的
  • 使用长轮询或服务器轮询 - 使1请求获取数据。它保持打开状态,并在需要时将数据刷新到套接字(到您的浏览器)。 TCP连接保持打开状态。当连接超时 - 您可以重新打开它。它通常比以上更有效 - 但连接保持开放。
  • 使用XMPP或其他一些协议(不是HTTP) - 主要用于聊天,就像我认为的facebook/msn,可能是谷歌和其他一些协议。

您发布的网站使用第二种方法 - 当它检测到该页面的POST请求时,它将保持连接打开并连续转储数据。 您需要做的是向该页面发出POST请求,您需要查看哪些参数(如果有)需要发送。无论您如何提出请求,只要您发送正确的参数即可。

您需要用分隔符读取响应 - 可能每次他们想要处理数据时,都会发送\ n或其他分隔符。

希望这会有所帮助。如果你看到你仍然无法绕过这个让我知道,我会进入更多的技术细节

+0

谢谢,但你能给我多一点细节?我该怎么发送POST请求,以及为什么要这个地址(它只包含一行)?它可以与liburl或python一起使用吗?我可以期望得到什么? – davidhigh