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



留言
張貼留言