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);
    }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章