我被要求抓取一个通过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>
创建文件抓取器.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 表格:
<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进行研究来找到它。没有解决方法。至少没有他们,我不知道他们中的任何一个。