• HtmlParser应用


    HtmlParser应用,使用Filter从爬取到的网页中获取需要的内容

    {
            
            String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
            
            //获取页面中的<a href='xxx' [属性]>格式的链接
            nodeFilterTagClass(url, "UTF-8", LinkTag.class);
        
            //或取页面中的<img src='xxx' [属性='属性值']>格式的链接
            nodeFilterTagClass(url, "UTF-8", ImageTag.class);
            
            //或取页面<title>xxxx</title>标题
            nodeFilterTagClass(url, "UTF-8", TitleTag.class);
            
            //获取页面<div [属性='属性值']> xxx</div>
            //nodeFilterTagClass(url, "UTF-8", Div.class);
    
    }
    复制代码

    程序运行结果:



    TagNameFilter实例应用
    是最容易理解的一个Filter,根据Tag的名字进行过滤

    复制代码
        /**
         * 
         * 根据标签名过滤页面中的标签信息
         * 
         * @param url        要解析的url页面
         * @param encoding    使用的字符编码
         * @param tagName    标签名
         */
        public static void nodeFilterTagName(String url,String encoding,String tagName){
            try {
                Parser parser = new Parser();
                parser.setURL(url);
                if(null==encoding){
                    parser.setEncoding(parser.getEncoding());
                }else{
                    parser.setEncoding(encoding);
                }
                //过滤页面中的链接标签
                NodeFilter filter = new TagNameFilter(tagName);
                NodeList list = parser.extractAllNodesThatMatch(filter);
                for(int i=0; i<list.size();i++){
                    Node node = (Node)list.elementAt(i);
                    System.out.println("link is :" + node.toHtml());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            
            String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
            
            //获取页面中的<a href='xxx' [属性]>格式的链接
            nodeFilterTagName(url, "UTF-8", "a");
            
            //或取页面中的<img src='xxx' [属性='属性值']>格式的链接
            nodeFilterTagName(url, "UTF-8", "img");
            
            //获取页面中的<div>链接
            //nodeFilterTagName(url, "UTF-8", "div");
            
        }
    复制代码

    程序运行结果同上

    StringFilter实例应用
    过滤显示字符串中包含指定内容的标签节点。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示

    复制代码
        /**
         * 过滤显示字符串中包含指定内容的标签节点。注意是可显示的字符串,不可显示的字符串中的内容(例如注释,链接等等)不会被显示
         * 
         * @param url        请求处理的url
         * @param encoding    字符编码
         * @param containStr包含的指定内容
         */
        public static void stringFilter(String url,String encoding,String containStr){
            try {
                Parser parser = new Parser();
                parser.setURL(url);
                if(null==encoding){
                    parser.setEncoding(parser.getEncoding());
                }else{
                    parser.setEncoding(encoding);
                }
                //OrFilter是结合几种过滤条件的‘或’过滤器
                NodeFilter filter = new StringFilter(containStr);
                NodeList list = parser.extractAllNodesThatMatch(filter);
                for(int i=0; i<list.size();i++){
                    Node node = (Node)list.elementAt(i);
                    System.out.println("link is :" + node.toHtml());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            
            String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
            stringFilter(url, "UTF-8", "img.baidu.com");
            
        }
    复制代码

    程序运行结果




    OrFilter实例应用
    OrFilter是结合几种过滤条件的‘或’过滤器,与此相反的是AndFilter,AndFilter是集合几个过滤条件的‘与’过滤器

    复制代码
        /**
         * OrFilter是结合几种过滤条件的‘或’过滤器
         * 
         * 一般主题信息包含在下列标签中:<table>、<tr>、<td>、<p>、<div>等。如果要过滤出这些节点标签,可以使用OrFilter过滤器
         * 
         * @param url        请求处理的url
         * @param encoding    使用的字符编码
         * @param filters    多个过滤器数组
         */
        public static void orMultiFilter(String url,String encoding,NodeFilter[] filters){
            try {
                Parser parser = new Parser();
                parser.setURL(url);
                if(null==encoding){
                    parser.setEncoding(parser.getEncoding());
                }else{
                    parser.setEncoding(encoding);
                }
                //OrFilter是结合几种过滤条件的‘或’过滤器
                NodeFilter filter = new OrFilter(filters);
                NodeList list = parser.extractAllNodesThatMatch(filter);
                for(int i=0; i<list.size();i++){
                    Node node = (Node)list.elementAt(i);
                    System.out.println("link is :" + node.toHtml());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
            
        public static void main(String[] args) {
            
            String url = "http://wenku.baidu.com/search?word=htmlparser&lm=0&od=0&fr=top_home";
            //过滤多个标签 或关系
            NodeFilter[]  filters = new NodeFilter[3];
            filters[0] = new NodeClassFilter(TableTag.class); 
            filters[1] = new NodeClassFilter(ParagraphTag.class);
            filters[2] = new NodeClassFilter(ImageTag.class);
            orMultiFilter(url, "UTF-8", filters);
                    
        }
    复制代码

    程序运行结果:




    RegexFilter与LinkRegexFilter实例应用
    RegexFilter根据正则表达式匹配节点.与LinkRegexFilter不同的是,LinkRegexFilter只在LinkTag中寻找匹配

    复制代码
        /**
         * 在文本中通过正则进行匹配
         * 
         * @param url        请求处理的url
         * @param encoding    字符编码
         * @param regex        待匹配的正则表达式
         */
        public static void regexStringFilter(String url,String encoding,String regex){
            try {
                Parser parser = new Parser();
                parser.setURL(url);
                if(null==encoding){
                    parser.setEncoding(parser.getEncoding());
                }else{
                    parser.setEncoding(encoding);
                }
                //OrFilter是结合几种过滤条件的‘或’过滤器
                NodeFilter filter = new RegexFilter(regex);
                NodeList list = parser.extractAllNodesThatMatch(filter);
                for(int i=0; i<list.size();i++){
                    Node node = (Node)list.elementAt(i);
                    System.out.println("link is :" + node.toHtml());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 在链接地址中进行正则匹配,返回的是Link结点
         * 
         * @param url        请求url
         * @param encoding    字符编码
         * @param regex        待匹配的正则表达式
         */
        public static void linkTagRegexFilter(String url,String encoding,String regex){
            try {
                Parser parser = new Parser();
                parser.setURL(url);
                if(null==encoding){
                    parser.setEncoding(parser.getEncoding());
                }else{
                    parser.setEncoding(encoding);
                }
                //OrFilter是结合几种过滤条件的‘或’过滤器
                NodeFilter filter = new LinkRegexFilter(regex);
                NodeList list = parser.extractAllNodesThatMatch(filter);
                for(int i=0; i<list.size();i++){
                    Node node = (Node)list.elementAt(i);
                    System.out.println("link is :" + node.toHtml());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
            
            String url =  "F:/dennisit/email.txt";
    
            String emailRegex = "[a-zA-Z0-9_-]+@\w+\.[a-z]+(\.[a-z]+)?";  
            regexStringFilter(url, "UTF-8", emailRegex);
            System.out.println("-------------------------------------------");
            linkTagRegexFilter(url, "UTF-8", emailRegex);
            
        }
    复制代码

    程序运行结果


    转载请注明出处:[http://www.cnblogs.com/dennisit/p/3191803.html]

    热爱生活,热爱Coding,敢于挑战,用于探索 ...
     
    分类: 数据挖掘
  • 相关阅读:
    【vim】 match手动设置想高亮的关键字
    【git】add代码之前查看大致修改代码量
    语法错误和语义错误区别
    PIL安装方法
    dlib的安装
    python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
    shape与reshape区别
    操作系统复习灭火思维导图
    sql语句模糊查询
    python中sort和sorted函数的区别
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3192345.html
Copyright © 2020-2023  润新知