如何操作从X射线刮刀(node.js)检索的默认值

问题描述 投票:5回答:2

这是我的代码:

var Xray = require('x-ray');  
var x = Xray();
x('http://someurl.com', 'tr td:nth-child(2)', [{  
    text: 'a',
    url: 'a@href'
  }]).write('results.json')

我需要使用每个标记中的第一个单词填充名为“text”的字段。标记值的示例:

“第一手二手落后”

实际结果是文字:第一个单词第二个单词第三个单词

期望的结果文本:FirstWord

我可以对result.json文件进行后处理,但我不喜欢这样。

javascript node.js scraper
2个回答
1
投票

有一个由cbou制作的x射线库 它的自定义x-ray API具有可以改变输出的功能准备 https://github.com/cbou/x-ray#xrayprepare-str--fn

例:

function uppercase(str) {
  return str.toUpperCase();
}

xray('mat.io')
.prepare('uppercase', uppercase)
.select('title | uppercase')
.run(function(err, title) {
  // title == MAT.IO
});

2
投票

您可以在过滤器中定义您的功能,这在官方Github页面中显示

var Xray = require('x-ray');
var x = Xray({
  filters: {
    trim: function (value) {
      return typeof value === 'string' ? value.trim() : value
    },
    reverse: function (value) {
      return typeof value === 'string' ? value.split('').reverse().join('') : value
    },
    slice: function (value, start , end) {
      return typeof value === 'string' ? value.slice(start, end) : value
    }
  }
});

x('http://mat.io', {
  title: 'title | trim | reverse | slice:2,3'
})(function(err, obj) {
/*
  {
    title: 'oi'
  }
*/
})
© www.soinside.com 2019 - 2024. All rights reserved.