0

我用 nodejs 的 xray 模块提取了产品名称和产品价格。当我在抓取时,一些像 /n 这样的 htm lexpressions 带有文本。我想替换所有 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                '
}

另外,如何检查此页面上是否存在元素?

谢谢。

4

1 回答 1

0

所以你想改变

'\n                    549,00 TL                '

为了

549,00 TL

我希望我的问题是正确的:

它只是一个新行 (\n) 和空白空间,所以如果你修剪结果,你会得到你正在寻找的东西。

x-ray 允许您添加过滤器并将它们应用于您的查询:

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'
                }])

在那里,您可以选择传递修剪过滤器的所有选项。如果一切顺利,结果将与您预期的一样

于 2022-01-14T22:52:40.633 回答