【问题标题】:How to manipulate default value retrieved from x-ray scraper (node.js)如何操作从 X 射线刮刀(node.js)中检索到的默认值
【发布时间】:2015-08-07 11:05:36
【问题描述】:

这是我的代码:

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

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

"FirstWord SecondWord ThirdWord"

实际结果是文本:FirstWord SecondWord ThirdWord

所需的结果文本:FirstWord

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

【问题讨论】:

    标签: javascript node.js scraper


    【解决方案1】:

    您可以在过滤器中定义您的功能,该过滤器显示在官方 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'
      }
    */
    })
    

    【讨论】:

      【解决方案2】:

      有一个 cbou 制作的 x 射线库的 fork
      它的自定义 X 射线 API 有一个功能 prepare 可以改变输出
      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
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 2017-07-05
        • 2012-08-08
        • 1970-01-01
        相关资源
        最近更新 更多