使用java自带的swing解析html,用起来简单,速度也很快。首先要导入javax.swing.text.*和javax.swing.text.html.*两个包。然后定义一个parser的类,继承了javax.swing.text.html.HTMLEditorKit.ParserCallback这个类,在javax.swing.text.html.HTMLEditorKit.ParserCallback这个类中,有如下几个方法
void | flush() |
void | handleComment(char[] data, int pos) |
void | handleEndOfLineString(String eol) 它的调用是在完成流的解析之后且在调用 flush 之前。 |
void | handleEndTag(HTML.Tag t, int pos) |
void | handleError(String errorMsg, int pos) |
void | handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) |
void | handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) |
void | handleText(char[] data, int pos) |
先拿handleStartTag方法来说,当发现html标签开始的时候调用这个函数,t是标签的名,(比如HTML.Tag.A,这些标签可以在网上查到),a是属性列,比如a标签中的hreg属性,可以通过 HTML.ATTRIBUTE.HREF来拿到。同样,属性列swing也公开了。handleEndTag是当标签结束的时候被调用。用法大家可以看看我写的parser类代码如下:






























































































































































回调类parser写好了,但是还要搞清楚如何使用~~我们需要定义一个类,这个类用来实例化一个HTMLEditorKit.Parser对象,具体代码为
public class HtmlParser extends HTMLEditorKit{
public HTMLEditorKit.Parser getParser(){
return super.getParser();
}
}在定义一个htmltest类,在他的main方法中,代码如下
HTMLEditorKit.Parser parser=new HtmlParser().getParser();实例化一个parser
Parser p=new Parser("http://www.xjtu.edu.cn"); 初始化回调类
HTTP http=new HTTPt(); http为自己写的一个类,它可以获得网页源代码
http.send("http://www.xjtu.edu.cn", null);
parser.parse(new StringReader(http.getBody()), p, true); 所做的工作都为了这一句话!!!!!
java.util.Vector link=p.getLinks();
for(int i=0;i<link.size();i++){
System.out.println(link.get(i));
}
这样便得到了xjtu这个网页上的链接,结果如下
http://www.xjtu.edu.cn/en/
http://dean.xjtu.edu.cn/
http://www.xjtu.edu.cn/jdgk/jdgk.htm
http://www.xjtu.edu.cn/jdls/jdls.html
http://www.xjtu.edu.cn/jgsz/jgsz.htm
http://www.xjtu.edu.cn/xjtuer/index.html
http://www.xjtu.edu.cn/rcpy/rcpy.htm
http://www.xjtu.edu.cn/kxyj/kxyj.htm
http://www.xjtu.edu.cn/zsjy/zsjy.htm
http://www.xjtu.edu.cn/yrhj/yrhj.html
http://www.xjtu.edu.cn/ssxz/ssxz.htm
http://www.xjtu.edu.cn/rczp/rczp.htm
http://www.xjtu.edu.cn/hzjl/hzjl.htm
http://www.xjtu.edu.cn/tsda/tsda.htm
http://www.xjtu.edu.cn/kjcy/kjcy.htm
http://www.xjtu.edu.cn/jdxy/jdxy.htm
http://www.xjtu.edu.cn/wlzy/wlzy.htm
http://www.xjtu.edu.cn/fwxd/fwxd.htm
http://xjtunews.xjtu.edu.cn/
http://xjtunews.xjtu.edu.cn/
http://www.xjtu.edu.cn#
https://oa.xjtu.edu.cn/
http://donate.xjtu.edu.cn
http://202.117.38.12/
http://bbs.xjtu.edu.cn/
http://webmail.xjtu.edu.cn/
http://stu.xjtu.edu.cn/
http://www.xjtu.edu.cn/info/info.html
http://202.117.22.184
mailto:xinxigl@mail.xjtu.edu.cn
http://202.117.23.150/enteringweb/
http://gs.xjtu.edu.cn/zhaos/
http://www.xjtlu.edu.cn/
还可以获得链接信息,和文本信息,我就不写出来了,具体都在parser回调类中实现。