HtmlParser可以帮助我们对HTML页面进行分析。HTMLParser的核心模块是org.htmlparser.Paerser类,这个类实际上帮助我们完成了页面的分析工作。
使用HTMLParser的几个关键步骤
.1 通过Parser类创建一个解析器
Parser parser = Parser.createParser(String HTMl,
encode_UTF8);
.2 创建一个Filter或者Visitor
补充:比较常用的CSS 样式选择器表达式:
选择器 | 例子 | 例子描述 |
---|---|---|
.class | .intro | 选择所有class=”intro”的所有标签 |
#id | #intro | 选择id为intro的元素 |
[attribute=value] | [target=_bank] | 选取target属性等于_bank的所有标签 |
例如通过:table[class='business02 ty03']
,table[summary='Sailing Schedules Results']
这两条css样式表达式可以定位帮助我们定位到<table class="business02 ty03" summary="Sailing Schedules Results">........<table>
点击此连接了解更多关于CSS选择器语法的介绍:
以下代码为创建一个filter
CssSelectorNodeFilter tableFilter1 = new CssSelectorNodeFilter("css 选择器表达式");
CssSelectorNodeFilter tableFilter2 = new CssSelectorNodeFilter(
"css 选择器表达式");
AndFilter filter = new AndFilter(tableFilter1, tableFilter2);
. 3使用Parser根据filter或者Visitor来获取所有符合条件的节点
NodeList tableNodeList =parser.extractAllNodesThatMatch(filter);
. 4 对节点内容进行处理
访问节点的方法
- Node getParent():取得父节点
- NodeList getChildren():取得子节点列表
- Node getFirstChild():取得第一个子节点
- Node getLastChild():取得最后一个子节点
- Node getPreviousSibling():取得前一个兄弟
- Node getNextSibling():取得下一个兄弟节点
- Node NodeList.elementAt(int i):定位到目标索引的节点
- Node getChild(int index):根据指定索引下标定位到该节点的某一个孩子节点。(补充如何准备找到孩子节点的下标)在分析HTML页面的,调试代码时。在Debug模式下更加方便我们观察到节点元素的孩子的节点的下标以及节点的内容。
TableTag scheduleTable = (TableTag) tableNodeList.elementAt(i);
获取Node内容的函数:
String getText():取得文本
String toPlainTextString():取得纯文本信息。(这个经常用到)
String toHtml():取得HTML信息(原始的HTMl)
String toHtml(boolean verbatim):取得HMTL信息(原始HTML)
String toString():取得字符串信息(原始HTMl)
Page getPage():取得这个Node对应的Page对象
int getStartPosition():取得这个Node在HTML页面中的起始位置
int getEndPosition():取得这个Node在HTML页面中的结束位置
常用的标签节点
org.htmlparser.tags.CompositeTag
LinkTag类:存储链接指向的位置以及它包含的文本
一些LinkTag常用的方法
- String extractLink():从href属性中提取链接(该方法经常用到)
- String getLink():返回该链接所指向的URL作为字符串
- String getLinkText():返回此链接包含的纯文本
SelectTag类:Select标签
- OptionTag[] getOptionTags():获取这个select标签中的选项列
OptionTag类:option标签
- String getOptionText():获取此option中的文本
- String getValue():获取value属性
- void setValue(String value):设置value属性
TextareaTag类:表单中的文本区域标签
- String getValue():获取此文本框中的纯文本内容
表格中包含的不同节点标签常用的方法
TableTag类:table标签
- TableRow getRow(int index):根据指定的索引获取该表格中对应的其中某一行。
- int getRowCount():获取该table中的行数
- TableRow[] getRows():获取该table中所有的行标签节点(返回的是一个对象数组)
TableRow类:行标签节点
- int getColumnCount():获取此行中的列数。
- TableColumn[] getColumns():获取该行标签的所有的列标签*(这个方法经常用到)*
- int getHeaderCount():获取此行中的标题数
- TableHeader[] getHeader():获取该行标签中的标题数目
- boolean hasHeader():检查此表格中是否含有标题
TableCoumCount:列标签节点(单元格)