动态从Node.js数据流中抓取 URL



我正在使用一个节点.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";
    }

当它命中条件语句时,它会抓取一次,然后程序关闭。它不会将所需的内容存储为对象的属性。如果不满足条件,它确实会存储设置为"无内容"的破坏内容属性。

我想知道的是:是否有可能在飞行中像这样刮? 抓取是否使程序陷入困境?还有其他建议的方法可以得到类似的结果吗?

我还没有使用 nodeio,但签名看起来是一个异步回调,所以从程序流的角度来看,这发生在后台,因此不会阻止下一个语句发生(下一个语句是你的 if 块之外的任何内容)。

看起来您正在尝试按顺序执行此操作,这意味着您需要重新考虑您希望回调做什么,或者通过将整个事情放在一个 while 循环中来强制它是顺序的,该循环仅在您有破坏内容时才退出(我不建议这样做)。

为了进行测试,请尝试在回调中对破坏内容执行控制台.log看看它吐出了什么。

相关内容

  • 没有找到相关文章

最新更新