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

}
复制代码




posted @   glose  阅读(2389)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2011年12月 >
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示