不写正则,如何提取html字符串中的信息?

不写正则,如何提取html字符串中的信息?,第1张

如果有一段html文本,我们想提取里面的某个属性值,但又不想写正则表达式,怎么办呢?

如果是node,因为没有dom,我们可以选择用cheerio这个库来帮我们搞定;而前端的话,我们可以新创建一个dom节点,将html文本信息以innerHTML的方式写入进去,然后就可以利用querySelectorAll等方法提取相关信息了。

有以下两种方法:

假设为如下文本框:

1

<input type="text" value="" id="text">

1、原生JS获取文本框的值:

1

document.getElementById("text").value //text为文本框的id

2、jquery获取文本框的值:

1

$("#text").val()

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/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6148520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存