更新网络刮刀

时间:2018-03-04 17:14:26

标签: node.js web-scraping

您好我终于能够设置我的webscraper并将数据导入我的网页:)

然而,我的网页在端口3001上运行,网页刮刀在端口8080上运行,我有点困惑,因为我可以设置一个计时器来在后台更新刮刀?

Index.js

window.addEventListener('mousemove', function(e) {
    var evt = e || event;
    if (dragging) {
        var deltaX = evt.clientX - lastX;
        var deltaY = evt.clientY - lastY;
        lastX = evt.clientX;
        lastY = evt.clientY;
        marginLeft += deltaX;
        marginTop += deltaY;
        canvas.style.marginLeft = marginLeft + "px";
        canvas.style.marginTop = marginTop + "px";
    }
    e.preventDefault();
}, false);

现在的工作方式是我需要导航到http://178.62.253.206:8080来更新网络抓取工具。

我希望在后台静默更新刮刀

scraper.js

var scraper = require(__dirname + '/scripts/scraper.js');
var express = require('express');
var path = require('path');
var app = express();

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/test";

app.use(express.static(__dirname + '/public'));

// set the view engine to ejs
app.set('view engine', 'ejs');

// index page 
app.get('/', function(req, res) {
   MongoClient.connect(url, function(err, db) {
     if (err) throw err;
     var dbo = db.db("mydb");
     dbo.collection("customers").find({}).toArray(function(err, result) {
       if (err) throw err;
       res.render('pages/index', {
         result: result,
      });
        db.close();
      });
   });  
 });


app.listen(3001);
console.log('navigate to: http://178.62.253.206:3001');

frederik

1 个答案:

答案 0 :(得分:2)

我看到三个选项:

  • 轮询
  • Websockets [推荐]
  • IPC

Differences between websockets and long polling for turn based game server

Websockets

在2018年,我建议使用websockets,因为它的CPU密集度更低,更简单。 Socket.io将非常适合您的需求。

在服务器端,您可以每2秒向所有连接的客户端广播更新的网络刮板数据。

setInterval(function(){
    data = updateData();
    io.sockets.emit('webscraper data', data);
}, 1000);

在客户端,您可以捕获该事件,并更新您的页面。

socket.on('webscraper data', function(data){
    $('#data').... // udpate dom here
});

这是一个指向socket.io的基本聊天教程的链接,可以让您启动并运行:https://socket.io/get-started/chat/

长轮询

以下是使用快速EventEmitter进行长轮询的示例:Node.js: Long-polling with EventEmitter and Express 4.x | Catching request close