Javascript x射线刮擦时移除的制动标签

Javascript x射线刮擦时移除的制动标签,javascript,node.js,web-scraping,x-ray,Javascript,Node.js,Web Scraping,X Ray,我是JS的新手。我正在用X射线抓取一个网址。按预期刮除标签时会将其移除,但我希望将标签替换为类似的内容 例如: 如果我刮掉像“span#刮掉的部分” <span id="scraped-portion"><span class="bold>NodeJS</span><br> <span class="bold>Version:</span> 8<br><span class="bold>Dat

我是JS的新手。我正在用X射线抓取一个网址。按预期刮除标签时会将其移除,但我希望将

标签替换为类似
的内容

例如: 如果我刮掉像
“span#刮掉的部分”

<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射线的解决方案,在使用X射线之前不需要替换html中的

标记(请参见下面的原始解决方案)

通过这种方式,您将使用X射线的
过滤器
函数,并将X射线函数相互嵌入(某种嵌套)

首先,我们将使用为X射线定义的自定义筛选函数(称为
replaceLineBreak
)替换原始html中的

标记。 其次,我们将使用replace with重建原始html结构的结果(通过重新添加
)作为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(); })
    });

原液

为什么不在用X射线处理html代码之前替换所有出现的

标记

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(); })
    ;
}
功能tst(请求、恢复){
var x=x射线();
变量html=
`
NodeJS
版本:8发布日期:2017年1月描述:其他文本 `.替换(/\/g,;); x ( html, ['span#刮伤部分'] )(函数(err,obj){res.header(“内容类型”,“text/html;charset=utf-8”);res.write(JSON.stringify(obj,null,4));res.end();}) ; }
那么您的代码将产生如下结果

NodeJS\n版本:8;发布日期:2017年1月;描述:其他一些文本\n


哪一个似乎很符合您的要求

也许是a?非常感谢,我很快会测试它。现在我还有一个问题。如何创建
[{“版本”:“8”,“发布日期”:“2017年1月”,“说明”:“其他文本”}]
。我很快也会为此提出一个新问题
NodeJS;   Version: 8;Date released: 2017 Jan;Description:Some other text
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(); })
    ;
}