动态地从node.js数据流中截取URL

时间:2012-05-22 16:48:30

标签: node.js stream scraper

我正在使用node.js项目(使用Wikistream作为基础,因此不完全是我自己的代码),它会对实时维基百科进行编辑。代码将每个编辑分解为其组成部分并将其存储为对象(请参阅https://gist.github.com/2770152处的要点)。其中一个部分是URL。我想知道在解析每个编辑时是否有可能刮取每个编辑的URL,显示预编辑和后编辑的维基百科页面之间的差异,抓住差异(在一个名为'diffchange diffchange-inline'的span类中) ,例如)并将其添加为对象的另一个属性。不是它可能只是一个字符串,不必完全结构化。

我尝试过使用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属性设置为“no content”。

我想知道的是:是否有可能在飞行中像这样刮?刮掉程序的刮痧是什么?是否有其他建议的方法来获得类似的结果?

1 个答案:

答案 0 :(得分:0)

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

看起来你正在尝试按顺序执行它,这意味着你需要重新考虑你想要你的回调做什么,或者通过将整个事物放在while循环中来强制它是顺序的,只有当你退出时有破坏性的内容(我不推荐)。

对于测试,尝试在回调中的vandalContent上执行console.log并查看它吐出的内容。