问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用htmlparser提取网页文本信息

发布网友 发布时间:2022-04-23 22:53

我来回答

2个回答

热心网友 时间:2022-04-19 00:24

HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用,基本各种需求都可以满足。比如问题中提到的提取网页文本信息。
用以下代码来实现提取网页文本信息

// 提取网页主要文本内容
public String getContent(){
content=(isHub())?getHubEntries():getTopicBlock();
System.out.println("<Content>:");
System.out.println("=========================");
System.out.println(content);
return content;
}
// 提取Hub类网页文本内容,如yahoo,sina等门户网
public String getHubEntries(){
StringBean bean=new StringBean();
bean.setLinks(false);
bean.setReplaceNonBreakingSpaces(true);
bean.setCollapse(true);
try {
parser.visitAllNodesWith(bean);
} catch (ParserException e) {
System.err.println("getHubEntries()-->"+e);
}
parser.reset();
return bean.getStrings();
}

// 获取主题性(Topical)网页文本内容:对于博客等以文字为主体的网页效果较好
public String getTopicBlock(){

HasParentFilter acceptedFilter=new HasParentFilter(new TagNameFilter("p"));
NodeList nodes=null;
try {
nodes=parser.extractAllNodesThatMatch(acceptedFilter);
} catch (ParserException e) {
System.err.println("getTopicBlock"+e);
}

StringBuffer sb=new StringBuffer();
SimpleNodeIterator iter=nodes.elements();
while(iter.hasMoreNodes()){
Node node=iter.nextNode();
sb.append(node.getText()+"\n");
}
parser.reset();
return sb.toString();
}
另外,要知道的是
HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:
public Parser ();
public Parser (Lexer lexer, ParserFeedback fb);
public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;
public Parser (String resource, ParserFeedback feedback) throws ParserException;
public Parser (String resource) throws ParserException;
public Parser (Lexer lexer);
public Parser (URLConnection connection) throws ParserException;
和一个静态类public static Parser createParser (String html, String charset);

提供几个常用的
对于树型结构进行遍历的函数,这些函数最容易理解:
Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node对应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
用于Filter过滤的函数:
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
用于Visitor遍历的函数:
void accept (NodeVisitor visitor):对这个Node应用visitor
用于修改内容的函数,这类用得比较少:
void setPage (Page page):设置这个Node对应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
其他函数:
void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作)
Object clone ():接口Clone的抽象函数。
以上知识可以完整处理HTML页面的所有内容
参考资料:
htmlparser官方网站下载地址
http://www.htmlparser.sourceforge.net/

热心网友 时间:2022-04-19 01:42

// 提取网页主要文本内容
public String getContent(){
content=(isHub())?getHubEntries():getTopicBlock();
System.out.println("<Content>:");
System.out.println("=========================");
System.out.println(content);
return content;
}
// 提取Hub类网页文本内容,如yahoo,sina等门户网
public String getHubEntries(){
StringBean bean=new StringBean();
bean.setLinks(false);
bean.setReplaceNonBreakingSpaces(true);
bean.setCollapse(true);
try {
parser.visitAllNodesWith(bean);
} catch (ParserException e) {
System.err.println("getHubEntries()-->"+e);
}
parser.reset();
return bean.getStrings();
}

// 获取主题性(Topical)网页文本内容:对于博客等以文字为主体的网页效果较好
public String getTopicBlock(){

HasParentFilter acceptedFilter=new HasParentFilter(new TagNameFilter("p"));
NodeList nodes=null;
try {
nodes=parser.extractAllNodesThatMatch(acceptedFilter);
} catch (ParserException e) {
System.err.println("getTopicBlock"+e);
}

StringBuffer sb=new StringBuffer();
SimpleNodeIterator iter=nodes.elements();
while(iter.hasMoreNodes()){
Node node=iter.nextNode();
sb.append(node.getText()+"\n");
}
parser.reset();
return sb.toString();
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
三星8英寸平板电脑三星8英寸平板电脑哪个型号好 长城第一墩文化景区-讨赖河吊桥地址在哪里? 珲春景点简介 夏季需要加防冻液吗? 抽血感染艾滋病的概率 清洁剂的作用有哪些 日化产品抗菌抑菌效果怎样 杠杆高低有什么区别 姓赵取什么名字好 赵姓男孩女孩取名字大全 赵姓好听顺口的女孩名字女孩姓赵有气质名字 c语言怎么提取文本文件中我想要的一些信息? 如何用Python提取网页标签中的文本信息? 高中语文如何快速提取文本信息 单反机的镜头50mm是什么意思,怎样使用 用135相机拍摄标准人像最好选用多大镜头 我们说的标准镜头50度是单只眼还是双眼的? 120相机与130相机的标准镜头的焦距分别是什么 单反的标准镜头 广角镜头什么意思i? 标准镜头怎么用? 单反的标准镜头 广角镜头什么意思i 东莞哪里有旅游景点看? 135单镜反光照相机中,50mm属于 光圈,景深,焦距,三者的关系? 135照相机的拍摄人像的最佳镜头焦距 东莞哪里好玩? 单反的焦段一般是怎样划分的?如超广角,广角等等 东莞去哪里的海边好玩些?有哪些推荐? 135相机的标准镜头是什么? 35mm和135mm相机的区别? 东莞好玩的景点排名是怎样的? 如何用java编程实现文本文档中某些有用信息的提取? 简述ocr获取文本信息 信息抽取 何种方法有效? 如何提取EXE中的文本信息 哪个平板电脑牌子适合高龄老年人用 求推荐适合老人用平板 老年人用起来不错的平板电脑哪款比较好? 适合老年人用的平板电脑哪款比较好 推荐个老人用的平板电脑 适合老人用的平板电脑 适合老人用的平板电脑? 10寸1千多适合老人用的平板电脑有哪些推荐一下 老年人该选择什么样的平板电脑呢? 适合中老年人娱乐的平板电脑(最好ipad) 老人用平板电脑哪个牌子的好 老人用平板电脑哪个牌子的好,实用 适合老人使用的平板电脑有哪些? json字符串怎转换成json对象? JAVA中如何将一个json形式的字符串转为json对象? 下面哪些方法可以将JSON字符串转换为JSON对象( )。 选择一项或多项...