在 X 射线刮擦上去除了制动标签
Brake tags removed on x-ray scrape
我是 JS 新手。我正在用 X 光刮 url。当按预期刮擦时,标签会被删除,但我希望 <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>
标签
有可能还是我应该更好地使用其他库?
UPDATE
我找到了一个纯基于 X-Ray 的解决方案,无需在使用 X-Ray 之前替换 html 中的 <br>
标签(请参阅下面的原始解决方案)。
这样,您将使用 X-Ray 的 filter
函数,此外还将 X-Ray 函数相互嵌入(某种嵌套)。
首先,我们将使用为 X-Ray 定义的自定义过滤器函数(称为 replaceLineBreak
)替换原始 html 中的 <br>
标签。
其次,我们将使用替换结果重建原始 html 结构(通过重新添加 <span id="scraped-portion">
)作为 X-Ray 调用的第一个参数。
希望你会喜欢!
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
ORIGINAL SOLUTION
为什么不在通过 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
这似乎很符合您的要求
我是 JS 新手。我正在用 X 光刮 url。当按预期刮擦时,标签会被删除,但我希望 <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>
标签
有可能还是我应该更好地使用其他库?
UPDATE
我找到了一个纯基于 X-Ray 的解决方案,无需在使用 X-Ray 之前替换 html 中的 <br>
标签(请参阅下面的原始解决方案)。
这样,您将使用 X-Ray 的 filter
函数,此外还将 X-Ray 函数相互嵌入(某种嵌套)。
首先,我们将使用为 X-Ray 定义的自定义过滤器函数(称为 replaceLineBreak
)替换原始 html 中的 <br>
标签。
其次,我们将使用替换结果重建原始 html 结构(通过重新添加 <span id="scraped-portion">
)作为 X-Ray 调用的第一个参数。
希望你会喜欢!
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
ORIGINAL SOLUTION
为什么不在通过 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
这似乎很符合您的要求