在X射线刮削上移除制动标签

时间:2017-06-10 12:46:37

标签: javascript node.js web-scraping x-ray

我是JS的新手。我正在用X射线刮一个网址。在按预期方式抓取时会删除标记,但我希望将<br>标记替换为;

之类的内容

例如: 如果我刮掉像'span#scraped-portion'

这样的东西
<span id="scraped-portion"><span class="bold>NodeJS</span><br>
    <span class="bold>Version:</span> 8<br><span class="bold>Date released:</span> 2017 Jan<br><span class="bold>Description:</span>Some other text
</span>

我将得到类似于以下

的结果
NodeJS /n Version: 8Date released: 2017 JanDescription: Some other text

<br>标签周围的文字会加在一起,很难理解什么是什么。 所以我希望将<br>标记替换为;

之类的内容

是否可以或者我应该更好地使用其他库?

1 个答案:

答案 0 :(得分:0)

  

<强>更新

我发现了一个基于X射线的纯解决方案,无需在使用X-Ray之前替换html中的<br>标签(参见下面的原始解决方案)。

这样你就可以使用X-Ray的filter函数以及相互嵌入X射线函数(嵌套)。

首先,我们将使用为X-Ray定义的自定义过滤功能(称为<br>)来替换原始html中的replaceLineBreak标记。 其次,我们将使用替换结果重建原始html结构(通过重新添加<span id="scraped-portion">)作为X射线调用的第一个参数。

希望你喜欢它!

    var x = Xray({
    filters: {
        replaceLineBreak: function (value) { return value.replace(/\<br\>/g, ';'); },
    }
});
var html =
`
    <span id="scraped-portion"><span class="bold">NodeJS</span><br>
        <span class="bold">Version:</span> 8<br><span class="bold">Date released:</span> 2017 Jan<br><span class="bold">Description:</span>Some other text
    </span>
`;

x(html,
    '#scraped-portion@html | replaceLineBreak' /// Filter function called to replace '<br>' to ';'
)(function (err, obj) {
    x(`<span id="scraped-portion">${obj}</span>`, /// Restore oroginal html structure to have the outer span with id 'scraped-portion
        '#scraped-portion'
    )(function (err2, obj2) { res.header("Content-Type", "text/html; charset=utf-8"); res.write(obj2); res.end(); })
    });

产生以下字符串:

NodeJS;   Version: 8;Date released: 2017 Jan;Description:Some other text
  

原始解决方案

为什么不在X-Ray处理html代码之前替换<br>个标签的所有出现?

function tst(req, res) {
var x = Xray();
var html =
`
    <span id="scraped-portion"><span class="bold">NodeJS</span><br>
        <span class="bold">Version:</span> 8<br><span class="bold">Date released:</span> 2017 Jan<br><span class="bold">Description:</span>Some other text
    </span>
`.replace(/\<br\>/g, ';');

x
    (
    html,
    ['span#scraped-portion']
    )(function (err, obj) { res.header("Content-Type", "text/html; charset=utf-8"); res.write(JSON.stringify(obj, null, 4)); res.end(); })
    ;
}

然后你的代码就会产生这样的结果

NodeJS;\n Version: 8;Date released: 2017 Jan;Description:Some other text\n

几乎可以满足您的要求