日期:2014-05-17 浏览次数:20749 次
引入主要包:
? ?htmlparser.jar
?
?
解析HtmlParser的主要步骤:
? ? 解析出html中url
?
?
// Parser parser = new Parser( (HttpURLConnection) (new URL("http://www.google.com")).openConnection() );
Parser parser = new Parser();
parser.setEncoding(parser.getEncoding());
parser.setURL("http://www.google.com");
NodeFilter filter = new NodeClassFilter(LinkTag.class);
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
LinkTag node = (LinkTag) list.elementAt(i);
System.out.println(node.extractLink());
}
?
?
?
?
Visitor方式解析Html?
? ?使用visitor方式访问Html,一般不用这种方式,不细说
? ? ? ? //通过指定URLConnection对象创建Parser对象?
Parser parser = new Parser((HttpURLConnection)(new URL("http://www.google.com")).openConnection());
//设置Parser对象的字符编码,一般与网页的字符编码保持一致
parser.setEncoding("GB2312");
//创建LinkFindingVisitor对象
LinkFindingVisitor lvisitor = new LinkFindingVisitor("http://www.google.com");
//查找http://www.qq.com的链接个数
parser.visitAllNodesWith(lvisitor);
System.out.println("网页中包含http://www.google.com的链接个数:"+lvisitor.getCount());
?
?
Filter方式解析HTML
? ? HtmlParser也可以解析文本在本地:
?
Parser parser = new Parser("d:\\1.html");
parser.setEncoding(parser.getEncoding());
NodeFilter filter = new NodeClassFilter(LinkTag.class);
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++) {
LinkTag node = (LinkTag) list.elementAt(i);
System.out.println(node.extractLink());
}
?
?
?
?
HtmlParser自带的Filter:
TagNameFilter 接受所有满足指定Tag名的TagNodes.
?
TagNameFilter filter = new TagNameFilter("a");
NodeList nodeList = parser.parse(filter);
NodeClassFilter 接受所有接受指定的类的节点.
?
NodeFilter filter = new NodeClassFilter(LinkTag.class); //如链接标签
或
NodeFilter filter = new NodeClassFilter(TextNode.class); //如文本标签
NodeList nodeList = parser.parse(filter);
Node[] nodes = nodeList.toNodeArray(); //返回Node[]节点数组的情况
或
NodeClassFilter filter = new NodeClassFilter(TableTag.class);对表格的过滤获取
NodeList nodeList = parser.parse(filter);
TableTag tableTag = (TableTag) nodeList.elementAt(0);
TableRow[] rows = tableTag.getRows();
HasAttributeFilter 接受所有否含有某个属性(还可以设置该属性的值)的节点.
HasChildFilter 接受所有含有子节点符合该Filter的节点.
?
TagNameFilter filter = new TagNameFilter(tag);
HasChildFilter hasChildFilter = new HasChildFilter(filter);
NodeList nodeList = parser.parse(hasChildFilter);