如何通过目标站点上的websockets流式传输JSON数据

我被要求刮去一个通过websockets接收数据的站点,然后通过javascript / jquery将其呈现给页面。 是否有可能绕过中间人(DOM)并使用/刮取通过套接字传来的数据? 这可能与像幻影JS一样的无头像webkit? 目标站点正在使用socket.io。

我需要使用这些数据并根据数据中的关键字触发警报。 我正在考虑Goutte图书馆,并将在PHP中构建刮板。


Socket.io与websockets不完全相同。 既然你知道他们使用socket.io我专注于此。 刮这个套接字最简单的方法是使用socket.io客户端。

把它放在你的页面上:

<script src="https://github.com/LearnBoost/socket.io-client/blob/0.9/dist/socket.io.js"></script>
<script src="scraper.js"></script>

创建文件scraper.js:

var keywords = /foo|bar/ig;
var socket = io.connect('http://host-to-scrape:portnumber/path');
socket.on('<socket.io-eventname>', function (data) {
  // The scraped data is in 'data', do whatever you want with it
  console.log(data);

  // Assuming data.body contains a string containing keywords:
  if(keywords.test(data.body)) callOtherFunction(data.body);

  // Talk back:
  // socket.emit('eventname', { my: 'data' });
});

更新6-1-2014

而不是在服务器上运行它,它看起来像你试图在浏览器窗口中运行它,看看你在下面引用的StackOverflow问题。 所以我删除了有关NodeJS的一切,因为这是不需要的。


在我看来,这将是最适合你的方式:

直接从您的应用程序的客户端页面使用JavaScript废弃数据,而不使用PHP作为中端。 用这种方式你的服务器将不会有任何负载,我会推荐这个。 由于您的目标站点使用的是socket.io,因此请使用socket.io客户端来取消数据。 形式socke.io offiscial站点:

    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect('http://target_website.com');
              //look the next line closely
      socket.on('event_name', function (data) {
        console.log(data);
        //do something with data here
      });
    </script>

随着问题出现,您将如何知道* event_name * ? 你必须通过对目标网站的js进行研究来发现这一点。 没有工作。 至少我不了解他们中的任何一个。

链接地址: http://www.djcxy.com/p/75375.html

上一篇: How to scrape JSON data streamed via websockets on a target site

下一篇: How to gracefully restart delayed