• HTMLParser学习笔记(二)


    利用HTMLParser来抽取指定标签具有某属性的的文本内容,比如说抽取div标签,具有class属性问hd,抽取其中的文本内容

    (一)Filter类
    顾名思义,Filter就是对于结果进行过滤,取得需要的内容。HTMLParser在org.htmlparser.filters包之内一共定义了16个不同的Filter,也可以分为几类。
    判断类Filter:
    TagNameFilter
    HasAttributeFilter
    HasChildFilter
    HasParentFilter
    HasSiblingFilter
    IsEqualFilter
    逻辑运算Filter:
    AndFilter
    NotFilter
    OrFilter
    XorFilter
    其他Filter:
    NodeClassFilter
    StringFilter
    LinkStringFilter
    LinkRegexFilter
    RegexFilter
    CssSelectorNodeFilter

    所有的Filter类都实现了org.htmlparser.NodeFilter接口。这个接口只有一个主要函数:
    boolean accept (Node node);
    各个子类分别实现这个函数,用于判断输入的Node是否符合这个Filter的过滤条件,如果符合,返回true,否则返回false。

    以下是测试TagNameFilter类的代码

    复制代码
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.StringTokenizer;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.filters.AndFilter;
    import org.htmlparser.filters.HasAttributeFilter;
    import org.htmlparser.filters.NodeClassFilter;
    import org.htmlparser.filters.OrFilter;
    import org.htmlparser.filters.TagNameFilter;
    import org.htmlparser.nodes.TextNode;
    import org.htmlparser.tags.BodyTag;
    import org.htmlparser.tags.JspTag;
    import org.htmlparser.tags.LinkTag;
    import org.htmlparser.tags.MetaTag;
    import org.htmlparser.tags.TableTag;
    import org.htmlparser.tags.TitleTag;
    import org.htmlparser.util.NodeList;
    import org.htmlparser.util.ParserException;


    public class t {

    /**
    *
    @param args
    *
    @throws IOException
    */
    public static Parser getParser(String url,String encoding) throws ParserException, IOException{
    URL ur=new URL(url);
    HttpURLConnection urlConnection=(HttpURLConnection) ur.openConnection();
    Parser parser=new Parser(urlConnection);
    parser.setEncoding(encoding);
    return parser;
    }

           public static void test1(Parser parser) throws ParserException{ //获得网页<body></body>标签中的内容, 保存在body中 

               NodeFilter bodyFilter=new NodeClassFilter(BodyTag.class);
               NodeList nodeList=parser.extractAllNodesThatMatch(bodyFilter);
               Node node=null;
               for(int i=0;i<nodeList.size();i++){
                          node=nodeList.elementAt(i);
                          String bodyString=((BodyTag)node).getBody();
                          System.out.println(bodyString);
                    }

           }

        public static void test2(Parser parser) throws ParserException{   //抽取特定标签 具有某个属性的的元素 并获得他们的文本
    AndFilter filter=new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("class", "hd"));
    Node node=null;
    NodeList nodeList=parser.parse(filter);
    for(int i=0;i<nodeList.size();i++){
    //System.out.println(1);
    node=nodeList.elementAt(i);
    System.out.println(node.toPlainTextString());
    }
    }
    public static void main(String[] args) throws IOException, ParserException {
    // TODO Auto-generated method stub
    //String content=readFile(testFilePath);
    //String url="http://www.sina.com/";
    String url="http://gs.dlut.edu.cn/";
    String encoding="utf-8";
    Parser parser=getParser(url, encoding);
    test2(parser);
    }

    }
    复制代码

     

     

    复制代码
    import java.io.IOException;

    import java.net.HttpURLConnection;
    import java.net.URL;

    import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.filters.TagNameFilter;
    import org.htmlparser.util.NodeList;
    import org.htmlparser.util.ParserException;


    public class tagNameFilter {

    /**
    *
    @param args
    */
    public static Parser getParser(String url,String encoding) throws ParserException, IOException{
    URL ur=new URL(url);
    HttpURLConnection urlConnection=(HttpURLConnection) ur.openConnection();
    Parser parser=new Parser(urlConnection);
    parser.setEncoding(encoding);
    return parser;
    }
    public static void test(Parser parser) throws ParserException{
    NodeFilter filter=new TagNameFilter("span");
    NodeList nodes=parser.extractAllNodesThatMatch(filter);
    for(int i=0;i<nodes.size();i++){
    Node node=nodes.elementAt(i);
    System.out.println(node.toPlainTextString());
    }
    }
    public static void main(String[] args) throws ParserException, IOException {
    // TODO Auto-generated method stub
    String url="http://gs.dlut.edu.cn/";
    String encoding="utf-8";
    Parser parser=getParser(url, encoding);
    test(parser);
    }

    }
    复制代码
  • 相关阅读:
    Windows Phone开发(40):漫谈关键帧动画之中篇 转:http://blog.csdn.net/tcjiaan/article/details/7559978
    Windows Phone开发(43):推送通知第一集——Toast推送 转:http://blog.csdn.net/tcjiaan/article/details/7617664
    xslt运算符
    简单实现Ajax
    继承与多态
    servlet基础知识
    用telnet 测试Http协议
    http协议基础
    类的初始化
    多态
  • 原文地址:https://www.cnblogs.com/chenying99/p/2728686.html
Copyright © 2020-2023  润新知