package IBMSpider;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.TagNode;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
public class testHtmlParser {
public static void main(String[] args) {
try {
/*第一步,构建一个Parser*/
Parser parser = new Parser();
parser.setURL("http://www.cb.cityu.edu.hk/is/people/academic/");
parser.setEncoding(parser.getEncoding());
/*第二步,对网页解析,用parse(NodeFilter filter)
* 一方面,可以用实现NodeFilter接口的子类,如TagNameFilter
* 另一方面,可以修改NodeFilter接口方法:boolean accept(Node node),去构建自己的方法
* */
/*-------- 示例1 ---- */
NodeList nodes = parser.parse(new TagNameFilter("INPUT"));
/*-------- 示例2 ---- */
// NodeList nodes = parser.parse(new MyNodeFilter(new String[]{"input","font"}));
for(int i=0; i<nodes.size();i++){//nodes.size()
TagNode node = (TagNode)nodes.elementAt(i);
System.out.println("name是:" + node.getAttribute("name"));//获取tag的属性信息
}
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
示例2中自定义的MyNodeFilter如下
package IBMSpider;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Tag;
public class MyNodeFilter implements NodeFilter {
private String[] names;
public MyNodeFilter(String[] names)
{
this.names = names;
}
// 接口方法的实现
public boolean accept(Node node) {
if (names == null) return false;// 结点不是Tag则返回
if (node instanceof Tag == false) return false;// 结点是结束标记则返回
for (int i =0; i<names.length;i++){
String tagName =((Tag)node).getTagName();
if (tagName.equalsIgnoreCase(names[i])) return true;
}
return false;
}
}