我被要求抓取一个网站,该网站通过websockets接收数据,然后通过javascript/jquery将其呈现到页面上。是否可以绕过中间人(DOM)并消耗/擦除通过套接字的数据?像phantomJS这样的无头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' });
});

更新2014年6月1日

与其在服务器上运行它,不如在尝试在浏览器窗口中运行它,而是看下面引用的StackOverflow问题。因此,我删除了有关NodeJS的所有内容,因为这不是必需的。

07-24 09:47
查看更多