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

}




原文地址:https://www.cnblogs.com/dlutxm/p/2287253.html