我使用nodejs的X射线模块提取产品名称和产品价格。当我抓取的时候,一些像/n这样的htm表达式带有文本。我想替换所有的html代码,用替换的版本创建对象。
我有这样的密码:
var Xray = require('x-ray')
var x = Xray()
var urls=['link','link','link']
for(var i = 0; i < urls.length; i++){
x(urls[i], {
title: '#sp-title',
price: '.lastPrice'.replace(/(<([^>]+)>)/ig,"").trim()
})(function(err, obj) {
console.log(obj);
})
}上面的示例代码从3个不同链接的循环中获取数据,并作为一个对象保存,输出如下所示。
{
title: 'King P 1110 Exotic Katı Meyve Sıkacağı',
price: '\n 549,00 TL '
}
{
title: 'Xiaomi Mi Pro 10000 mAh Type-C Taşınabilir Şarj Cihazı',
price: '\n 144,14 TL '
}
{
title: 'Fakir River Çay Makinesi',
price: '\n 505,50 TL '
}此外,如何检查此页面中是否存在一个元素?
谢谢。
发布于 2022-01-14 22:52:40
所以你想改变
'\n 549,00 TL '为
549,00 TL我希望你的问题是对的:
它只是一个新的行(\n)和空空间,所以如果您修剪结果,您将得到您想要的。
X射线允许您添加过滤器并将它们应用于您的查询:
var Xray = require('x-ray')
const x = Xray({
filters: {
trim: function (value) {
return typeof value === 'string' ? value.trim() : value
},
low: function (value) {
return typeof value === 'string' ? value.toLocaleLowerCase() : value
},
status: function (value) {
newv = value.replace("Status: ", "")
return newv
},
lines: function (value) {
noLines = value.replace(/\r?\n|\r/g, "")
return noLines
},
punto: function (value) {
comments = value.replace(/.+?(?=·)/, "").replace('comments', '').replace('·', '')
return comments
},
toNum: function (value) {
return parseInt(value)
}
}
})你可以添加任何你想要的过滤器,然后在你的代码上放一个像这样的“\\ nameOfFilter”:
x(l.link, '.Item', [{
post_time: '.DiscussionMeta span a time@datetime | trim',
comment_time: '.CommentMeta span a time@datetime | trim',
origin: '.Category a | trim'
}])在这里,您有每一个选项,通过一个修剪过滤器。如果一切顺利的话,结果会和你所期待的一样。
https://stackoverflow.com/questions/66009602
复制相似问题