利用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/archive/2011/12/14/2287253.html