抓取源代码中没有的网站内容

时间:2011-08-24 19:23:44

标签: web-scraping

我想从http://www.fxstreet.com/rates-charts/currency-rates/

等网站获取一些财务数据

到目前为止,我正在使用liburl来获取源代码和一些正则表达式搜索来获取数据,然后我将其存储在一个文件中。

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

我有两个问题:

(i)两分钟内保持静态的源代码如何产生每秒更改一次的表?机制是什么?

(ii)如何获得具有第二时间分辨率的数据,即如何读出未在源代码中显示的更改表。

提前谢谢, 大卫

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

它会不断加载新数据

编辑:

你可以使用liburl或python,这并不重要。在HTTP下,当您浏览Web时,您发送GET或POST请求。 转到网站,打开开发人员工具(Chrome)/ firebug(firefox插件),您将看到在加载所有数据后,有一个请求未关闭 - 它保持打开状态。

当您拥有一个网站并且想要连续获取数据时,您可以通过以下几种技术来实现:

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

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

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

希望这会有所帮助。如果你发现你仍然无法解决这个让我知道,我将进入更多的技术细节