我需要开发一个应该监控其他网站页面的Web应用程序。 (即)检查内容是否及时更新。例如,某些内容需要每5分钟更新一些,有些内容需要每1小时更新一次,等等。
我目前的想法是使用wget下载所需的页面,并在后端生成一个完整的json文件。然后我的应用程序将通过ajax调用下载json,并基于此我将做一些警报。
我的问题是,这是正确的方法吗?或者已经有任何其他更好的方法来实现这一点。
答案 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,您可以在那里找到很多代理列表。
它可能对您没有帮助,但这是您可以选择整个网站的唯一方法(使用用户浏览器解析所有网站页面并发送回您的记录器是不公平的。)
干杯。