我正在使用一个 node.js 项目(使用Wikistream作为基础,所以不完全是我自己的代码),它流式传输实时维基百科编辑。该代码将每个编辑分解为其组成部分并将其存储为一个对象(请参阅https://gist.github.com/2770152上的要点)。其中一个部分是 URL。我想知道在解析每个编辑时是否有可能为每个编辑抓取显示预编辑和后编辑维基百科页面之间差异的 URL,获取差异(在名为“diffchange diffchange-inline”的跨度类中,例如)并将其添加为对象的另一个属性。不对,它可能只是一个字符串,不必完全结构化。
我试过使用nodeio并有一些这样的代码(我特别想只刮掉评论中标记的编辑(m [6])作为可能的破坏行为):
if (m[6].match(/vandal/) && namespace === "article"){
nodeio.scrape(function(){
this.getHtml(m[3], function(err, $){
//console.log('getting HTML, boss.');
console.log(err);
var output = [];
$('span.diffchange.diffchange-inline').each(function(scraped){
output.push(scraped.text);
});
vandalContent = output.toString();
});
});
} else {
vandalContent = "no content";
}
当它遇到条件语句时,它会刮一次,然后程序关闭。它不会将所需内容存储为对象的属性。如果不满足条件,它会存储一个设置为“无内容”的 vandalContent 属性。
我想知道的是:甚至有可能像这样在飞行中刮擦吗?抓取是否使程序陷入困境?是否有其他建议的方法来获得类似的结果?