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);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端