我需要开发一个web应用程序,这应该监测另一个网站的页面。(即)检查内容是否及时更新。例如,有些内容需要每5分钟更新一次,有些内容需要每1小时更新一次,等等。
我目前的想法是使用wget下载所需的页面,并在后端生成一个完整的json文件。然后,我的应用程序将通过ajax调用下载json,并在此基础上执行一些警报。
我的问题是,这是正确的方式吗?或者任何其他更好的方法来实现这一点。
发布于 2016-05-05 17:08:30
试着使用网络刮板机。
首先:如果你监控的网站不知道你的行为,你可能会考虑法律问题。
第二:是的,如果网站是简单的html,编程技巧很低,你可以使用node with dependencies,request和cheerio。这是一个基本的例子,告诉你如何解析独立网站上的新闻网址:
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]);
}
});如果是一个应用程序或大量使用ajax加载的异步内容,您可能需要考虑一下phantom.js。在这两种情况下,你都需要注意托管网站的服务器接受的请求数量,你可能最终会发现你的IP被禁止了,你可以在那里找到很多代理列表。
它可能对你没有帮助,但这是你可以浏览整个网站的唯一方法(使用用户浏览器解析所有网站页面并发送回记录器是不公平的)。
干杯。
https://stackoverflow.com/questions/37045840
复制相似问题