HTMLParser的HasAttributeFilter过滤方式分析网页

HTMLParser 在分析网页的时候有两种方式,一种是Visitor方式另外一种是Filter方式。

在这里我们看看使用filter分析网页信息的方法。

使用Filter方式访问网页,目的就是提取网页上的节点。在这里我们就可以使用HasAttributeFilter来进行分析。例如,我们要在百度上查询www.javaeerun.com的收录情况,那么根据上一篇文章 简单收录查询工具的原理  我们知道了要访问的URL和需要获取的节点,那么接下来就以此为例。

有这么几步是固定的:

Parser parser = new Parser((HttpURLConnection) new URL(url).openConnection());

NodeFilter filter = new HasAttributeFilter(attrName, attrValue);

NodeList nodeList = parser.extractAllNodesThatMatch(filter);

这样我们就已经获得了具有attrName=attrValue的NodeList了,接下来就是对Node的处理了

 

代码如下:

package com.javaeerun.demo.HTMLparserdemo.filter;
 
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
 
public class HasAttributeFilterDemo {
    public static void main(String[] args) {
        try {
            Parser parser = new Parser(
                    (HttpURLConnection) new URL("http://www.baidu.com/s?"
                            + "wd=site%3Awww.javaeerun.com").
                            openConnection());
            parser.setEncoding("GBK");
            NodeFilter filter = new HasAttributeFilter("class", "nums");
            NodeList nodeList = parser.extractAllNodesThatMatch(filter);
 
            if (nodeList != null && nodeList.size() > 0) {
                Node node = nodeList.elementAt(0);
                // 获取class="nums"的span
                System.out.println(node.toHtml());
                NodeList nl = node.getChildren();
                Node textNode = nl.elementAt(0);
                // 获取Text节点
                System.out.println(textNode.getText());
 
            }
        } catch (ParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 这样,我们就获得了这样的结果:

百度为您找到相关结果N个

这里的N是数字,具有xxx,xxx,xxx的格式。我们要做的处理就是把这个字符串当中非数字部分全部去掉然后拼接起来就可以了,这里就不做演示了。

 

本文转自JAVAEERun.com 转载请注明

你可能感兴趣的:(java,HtmlParser)