這是一個網頁純文字的剖析器,一般常用的方法是抓取網頁原始碼,並利用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("檔案名稱錯誤"); } }
(八)擷取奇摩字典畫面
(九)範例程式下載
留言
張貼留言