📄 htmlparse.java
字号:
package ch17;
import javax.swing.text.html.HTMLEditorKit.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.util.*;
import java.text.*;
//解析网页的类HTMLparse,父类为ParserCallback
public class HTMLparse extends ParserCallback {
Vector urls = new Vector();// 保存从网页中提取的URL
static final int NONE = 0;
static final int TITLE = 1;
static final int HREF = 2;
String Title = "";// 网页标题
String Desc = "";// 网页描述
String Keywords = "";// 关键字
String PageContent = "";// 网页内容
int state;// 表示解析状态
//规范化字符串函数
private String Format(String str, int length) {
if (str.length() < length)
return str;
return str.substring(0, length);
}
//处理简单标记函数
public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attributes,
int pos) {
//实现接口中的方法以处理HTML.Tag.META标志
if (tag.equals(HTML.Tag.META))
handleMETA(attributes);
}
//处理结束标志函数
public void handleEndTag(HTML.Tag tag, int pos) {
state = NONE;// 遇到结束标志时将状态标志置0表示此标志已经解析完
}
//处理开始标志函数
public void handleStartTag(HTML.Tag tag, MutableAttributeSet attributes,
int pos) {
if (tag.equals(HTML.Tag.TITLE))
state = TITLE;// 处理标题
else if (tag.equals(HTML.Tag.A))
handleAnchor(attributes);// 处理URL
else
state = NONE;
}
//处理URL链接
public void handleAnchor(MutableAttributeSet attributes) {
String url =(String)attributes.getAttribute(HTML.Attribute.HREF);
if (url == null)
return;
urls.add(url); //增加URL到urls vector中。
state = HREF;
}
//处理文本函数
public void handleText(char[] text, int pos) {
switch (state) {
case NONE:
//取得页面文本
PageContent += new String(text) + "";
break;
case TITLE:
//取得标题
Title = new String(text);
break;
}
}
//处理META标志函数
public void handleMETA(MutableAttributeSet attributes) {
String name = new String();
String ct = new String();
name = (String) attributes.getAttribute(HTML.Attribute.NAME);
name = name.toUpperCase();
ct = (String) attributes.getAttribute(HTML.Attribute.CONTENT);
if (name == null || ct == null)
return;
if (name.equals("DESCRIPTION")) {
Desc = ct;
return;
}
if (name.equals("KEYWORDS")) {
Keywords = ct;
return;
}
}
public Vector getLinks() {// 取得网页超链接集合
return urls;
}
public String getTitle() {// 规范化标题,最长100字节
return Format(Title, 100);
}
public String getDescription() {// 规范化描述,最长200字节
return Format(Desc, 200);
}
public String getKeywords() {// 规范化关键字,最长200字节
return Format(Keywords, 200);
}
public String getPageContent() {// 规范化网页内容,最长64000字节
return Format(PageContent, 64000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -