HTMLParser学习笔记(二)

天涯浪子 提交于 2020-03-24 09:53:55

利用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);    }}




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!