监控网页内容

时间:2016-05-05 08:25:44

标签: javascript jquery json ajax web

我需要开发一个应该监控其他网站页面的Web应用程序。 (即)检查内容是否及时更新。例如,某些内容需要每5分钟更新一些,有些内容需要每1小时更新一次,等等。

我目前的想法是使用wget下载所需的页面,并在后端生成一个完整的json文件。然后我的应用程序将通过ajax调用下载json,并基于此我将做一些警报。

我的问题是,这是正确的方法吗?或者已经有任何其他更好的方法来实现这一点。

1 个答案:

答案 0 :(得分:0)

  

尝试使用网络抓取工具。

首先:如果您监控的网站不了解您的行为,您可能会考虑法律问题。

第二:是的,如果网站是使用具有依赖性请求和cheerio的节点的低编程技能的纯HTML,那么你可以这样做。 以下是如何在独立网站上解析新闻网址的基本示例:

var request = require('request');
var cheerio = require('cheerio');

//proxy from http://proxylist.hidemyass.com/
var __proxyArray =["http://85.143.164.100:81", "http://111.13.143.141:8080", "http://176.9.60.39:3128" ];

var randomProxy = function (){
  var low = 0, high = __proxyArray.length;
  var shuffled = Math.floor(Math.random() * (high - low) + low);
  return __proxyArray[shuffled].uri ;
};

var options = {
    uri:"http://www.independent.co.uk/",
    proxy: randomProxy(),
    headers: {
              'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36'
            }
    };
  console.log("start");
request(options, function(err, res, body){
  if(err || res.statusCode != 200) {
    callback.call(null, new Error('Request failed'));
    return;
  }
  //entire content
  var xXx = JSON.stringify(body);
  console.log(xXx);

  //parsing with regex, you can use jquery in node as well
  var rePattern = new RegExp(/(?=<a href="\/news)(?:\s*)(.*?)(?:\s*)(?=<\/a>)/g);
  var newsMatches = body.match(rePattern);


  for (var i=0; i<newsMatches.length; i++){
    //continue parsing url's pages
    console.log(newsMatches[i]);
  }

});

如果是app或许多用ajax加载的异步内容你可能需要看一下phantom.js。在这两种情况下,您都需要处理托管网站的服务器接受的请求数量,最终可能会禁用您的IP,您可以在那里找到很多代理列表。

它可能对您没有帮助,但这是您可以选择整个网站的唯一方法(使用用户浏览器解析所有网站页面并发送回您的记录器是不公平的。)

干杯。