Kettle中使用javascript组件解析HTML表格

KETTLE中的组件都试过了不能解析公司财务提供数据文件。按照网络爬虫思路利用htmlparser包解决了表格解析问题。

 

流程
流程图

 

脚本
脚本

 

JAVASCRIPT脚本如下:

/***解析HTML信息表格***/
trans_Status = SKIP_TRANSFORMATION; 

var Parser= org.htmlparser.Parser;
var TagNameFilter = org.htmlparser.filters.TagNameFilter;
var HasAttributeFilter = org.htmlparser.filters.HasAttributeFilter;
var AndFilter = org.htmlparser.filters.AndFilter;
var NodeList = org.htmlparser.util.NodeList;

//从上级获取html数据流
var parser = new Parser(FileContent);  //FileContent为输入参数
var index = getInputRowMeta().size();
var filterTable = new AndFilter(new TagNameFilter("table"),new HasAttributeFilter("id","excel_table"));
var filterTr = new TagNameFilter("tr");
var filterTd = new TagNameFilter("td");

//取得表格NodeList
var tables = parser.parse(filterTable);
for( j=0;j<tables.size();j++){
     //取得行NodeList
    var rows =tables.elementAt(j).getChildren();
    rows.keepAllNodesThatMatch(filterTr);
    for ( i = 0; i < rows.size(); i++) {
        var cells =rows.elementAt(i).getChildren();
        cells.keepAllNodesThatMatch(filterTd);
        //输出行处理
        var row = createRowCopy(getOutputRowMeta().size());
        row[0]="";//输入行信息清空,不然每行都显示原文内容
        for (k=0;k<cells.size();k++){
            row[index+k] = cells.elementAt(k).toPlainTextString();
        }
        //输出行
         putRow(row);
    }
 }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值