跳到主要內容

htmlparser過濾網頁純文字


     這是一個網頁純文字的剖析器,一般常用的方法是抓取網頁原始碼,並利用RegularExpression來過濾掉標籤取得想要文字,但門檻較高,故此介紹一個好用的套件=>htmlparser,利用此套件過濾出純文字後,便可根據設計者需求抓取符合格式之文字。
    (一)首先下載htmlparser套件:htmlparser Download
    (二)匯入套件

    (三)撰寫myhtmlparser.class來進行過濾

import org.htmlparser.*;
import org.htmlparser.filters.*;
import org.htmlparser.nodes.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;
public class myhtmlparser {
    private String Content = "";
    private String ErrorMsg = "";
    public myhtmlparser(String link, String StartWord, String EndWord) {
        Content = "";
        ErrorMsg = "";
        try {
            Parser parser = new Parser(link);//剖析連結
            parser.setEncoding("UTF-8");//設定編碼
            HtmlPage htmlpage = new HtmlPage(parser);
            parser.visitAllNodesWith(htmlpage);//拜訪節點
            String body = htmlpage.getBody().toHtml();
            NodeList nodeList = null;
            Parser nodesParser = Parser.createParser(body, "UTF-8");
            NodeFilter textFilter = new NodeClassFilter(TextNode.class);
            try {
                nodeList = nodesParser.parse(textFilter);
            } catch (ParserException e) {
                e.printStackTrace();
            }
            Node[] nodes = nodeList.toNodeArray();//標籤節點轉為節點陣列
            boolean flag = false;
            for (int i = 0; i < nodes.length; i++) {
                Node nextNode = (Node) nodes[i];
                String content = "";
                if (nextNode instanceof TextNode) {
                    TextNode textnode = (TextNode) nextNode;
                    content = textnode.getText();//取得文字
                    content = content.trim();
                    if (StartWord.equals("") && EndWord.equals("")) {//空白則換行
                        Content += content + "\n";
                    } else {
                        if (flag) Content += content + "\n";                                                    
                        if (content.equals(StartWord)) {//自起始字串起開始抓取
                            flag = true;
                            Content += content + "\n";
                            continue;
                        }
                        if (content.equals(EndWord)) break;                                                 
                    }
                }
            }
            Content = Content.replaceAll(" ", " ");//取代空白
            Content = Content.replaceAll("–", "-");//取代-

        } catch (ParserException ex) {
            ErrorMsg = "輸入網址錯誤";           
        }
    }

    public String getContent() {
        return Content;
    }

    public String getErrorMsg() {
        return ErrorMsg;
    }
}

      (四)設計畫面

     (五)抓取網頁內容
private void Grab() {//抓取純文字
        String url = this.urlTxt.getText();             
        parser = new myhtmlparser(url, "", "");
        if (url.equals("")) return;
        if (parser.getErrorMsg().equals("")){
            this.jTextArea1.setText(parser.getContent());          
        }else{
            this.jTextArea1.setText(parser.getErrorMsg());
        }
    }
      (六)過濾網頁內容
 private void Tack() {//過濾純文字
        String url = this.urlTxt.getText();       
        String StartWord = this.startText.getText();
        String EndWord = this.endText.getText();
        parser = new myhtmlparser(url, StartWord, EndWord);
        if (parser.getErrorMsg().equals(""))  this.jTextArea1.setText(parser.getContent());          
        else this.jTextArea1.setText(parser.getErrorMsg());
 }
      (七)存檔
private void Store(){//存檔
        JFileChooser jf = new JFileChooser(".");//根目錄     
        jf.setDialogTitle("請選擇儲存資料夾");    
        jf.setSelectedFile(new File("Grab.txt"));
        if (jf.showSaveDialog(null) != JFileChooser.APPROVE_OPTION) return;        
         String sWay = jf.getSelectedFile().getAbsolutePath();//路徑       
        try {
            File fSave = new File(sWay);
            PrintWriter pw = new PrintWriter(fSave);
            pw.write(parser.getContent());
            pw.close();
            this.jTextArea1.setText("存檔完畢存檔路徑為:" + sWay);
        } catch (FileNotFoundException ex) {
            this.jTextArea1.setText("檔案名稱錯誤");
        }
}
   (八)擷取奇摩字典畫面

      (九)範例程式下載

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!