如何通过目标站点上的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