7

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

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

4

2 回答 2

6

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' });
});

2014 年 6 月 1 日更新

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

于 2013-11-12T09:04:20.440 回答
-2

在我看来,这对你来说是最好的方式:

使用 javascript 直接从应用程序的客户端页面抓取数据,而不使用 php 作为中间端。通过这种方式,您的服务器绝对不会有任何负载,我会推荐这个。由于您的目标站点正在使用 socket.io,因此请使用 socket.io 客户端来废弃数据。形成socke.io 官方网站

    <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进行研究来找到它。没有解决办法。至少我不知道没有他们中的任何一个。

于 2013-11-16T19:28:31.290 回答