Htmlparser 简介
htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或
提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。
基础运用
目标页面代码
<ul class="list_ul">
<li class="title_li">1
<a href="http://f.wanfangdata.com.cn/download/Periodical_zhfsbx98200105004.aspx" style="" title="全文" target="_blank" class="pdf_img"></a>
<a href="http://d.wanfangdata.com.cn/Periodical_zhfsbx98200105004.aspx" style="display:none" title="文摘" target="_blank" class="abs_img"></a>
[url=http://d.wanfangdata.com.cn/Periodical_zhfsbx98200105004.aspx]抗环瓜氨酸肽抗体检测在<font color="red">类风湿</font>关节炎中的意义[/url]
<span>(<t>被引用</t> 182 <t>次</t>)</span></li>
<li class="greencolor">[<t>期刊论文</t>] [url=http://c.wanfangdata.com.cn/Periodical-zhfsbx98.aspx]《中华风湿病学杂志》[/url]
<span>
<span title="被中信所《中国科技期刊引证报告》收录">ISTIC</span>
<span title="被北京大学《中文核心期刊要目总览》收录">PKU</span>
</span>-[url=http://c.wanfangdata.com.cn/periodical/zhfsbx98/2001-5.aspx]2001年5期[/url]<a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e6%9b%be%e5%b0%8f%e5%b3%b0">曾小峰</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e8%89%be%e8%84%89%e5%85%b4">艾脉兴</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e7%94%98%e6%99%93%e4%b8%b9">甘晓丹</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e5%8f%b2%e8%89%b3%e8%90%8d">史艳萍</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e5%ae%8b%e7%90%b4%e8%8a%b3">宋琴芳</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&Name=%e5%94%90%e7%a6%8f%e6%9e%97">唐福林</a></li>
</ul>
目标解析上述页面代码,获取标签
[url=http://d.wanfangdata.com.cn/Periodical_zhfsbx98200105004.aspx]抗环瓜氨酸肽抗体检测在<font color="red">类风湿</font>关节炎中的意义[/url]
中的内容,通过htmlparser实现如下:
package com.nit.htmlparser.test;
import java.io.File;
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.TagNameFilter;
import org.htmlparser.util.NodeList;
public class Htmlparser {
public static void main(String[] args) {
File file = new File("E:\\JavaEE Work\\HtmlparserTest\\source.txt");//获取上述html代码
try {
Parser parser = new Parser(file.getAbsolutePath());
parser.setEncoding("GBK");
//设置编码格式
NodeFilter filter1 = new TagNameFilter("li");
NodeFilter filter2 = new HasAttributeFilter("class","title_li");
NodeFilter filter = new AndFilter(filter1,filter2);
//设置页面过滤条件
NodeList nodeList = parser.extractAllNodesThatMatch(filter);
//根据过滤条件解析页面
Node node = nodeList.elementAt(0);
String html = node.getChildren().toHtml();
//将抽取出来的信息转化为html再次解析
filter1 = new HasAttributeFilter("target", "_blank");
parser = Parser.createParser(html, "GBK");
nodeList = parser.extractAllNodesThatMatch(filter1);
System.out.println(nodeList.elementAt(2).getChildren().asString());
filter2 = new TagNameFilter("span");
parser = Parser.createParser(html, "GBK");
nodeList = parser.extractAllNodesThatMatch(filter2);
System.out.println(nodeList.elementAt(0).getChildren().asString());
} catch (Throwable e) {
e.printStackTrace();
}
}
}
代码解析:htmlparser的使用,首先在项目中导入htmlparser.jar包,然后创建Parser类,可用通过文件导入,String类型数据创建(Parser parser = new Parser(file.getAbsolutePath());或parser = Parser.createParser(html, "GBK");)。
然后制定过滤规则。
标签过滤的方式有三种:
NodeFilter filter1 = new TagNameFilter("li");通过标签匹配需要需求的内容,本代码的意思就是匹配html标签为<li>的内容;
NodeFilter filter2 = new HasAttributeFilter("class","title_li");通过标签属性来匹配需求内容,本代码的意思是匹配html标签属性为class=title_li的内容;
NodeFilter filter = new AndFilter(filter1,filter2);匹配符合filter1和filter2两个过滤要求的内容,可以通过这三种方式随意组合来精确定位目标文本内容,这三句代码组合过滤条件为匹配<li class="title_li" >的文本内容。
当发现获取的文本还不是十分符合需要获取内容的要求时,可以将文本还原为html代码后,再次进行匹配。
当通过过滤器获取到nodeList后,通过htmlparser接口能够获取匹配出来的html的父标签,子标签,兄弟标签及其自身文本等内容。附上内容获取的接口:
HTMLParser将解析过的信息留存为一个树的结构。Node是信息留存的数据类型基础。
请看Node的界说:
public interface Node extends Cloneable;
Node中包括的要领有几类:
对付树型结构进行遍历的函数,这些函数最轻易理解:
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的抽象函数。
分享到:
相关推荐
2. **网页自动化**:在自动化测试或爬虫中,这两个库可以用于理解页面结构,触发交互元素,如按钮或表单。 3. **内容过滤与清理**:清理HTML中的广告代码、脚本或者不安全的元素,提供更纯净的数据。 4. **格式化和...
2. **解析模式**:HTMLParser有两种主要的解析模式:DOM解析和事件驱动解析。DOM解析将整个HTML文档转化为一个可操作的对象树,而事件驱动解析则是在解析过程中触发一系列事件,比如遇到标签开始、结束或者文本等。 ...
【标题】"MZnauka-2_htmlparser_zip_" 指的是一个关于HTML解析的课程资源包,其中包含了利用某种HTML解析器处理HTML文档的相关教学内容。这个压缩包可能是为了便于用户下载和学习,整合了一系列的教学材料。 【描述...
本项目聚焦于通过HTMLParser库解析HTML页面,提取特定信息,特别是歌曲链接,并利用HTTP下载这些资源。以下将详细讲解涉及的知识点: 首先,**HTMLParser** 是Python中用于解析HTML文档的内建库。它提供了一个基础...
jsoup能解析HTML字符串或者从URL加载页面,然后通过选择器选择元素,提取所需数据,甚至还能修正不规范的HTML。在爬虫项目中,jsoup是解析网页内容、提取结构化数据的关键工具,它可以高效地抓取和处理网页中的链接...
《Delphi Inspiration HTML Parser 深度解析》 在IT领域,HTML解析是网页数据抽取、网站自动化测试...通过理解和运用这个库,开发者可以更高效地进行网页数据抓取、页面自动化测试等任务,提升项目开发的效率和质量。
Java正则表达式是编程语言Java中用于处理字符串的强大工具,尤其在文本处理、数据验证和数据提取等方面具有广泛的应用。正则表达式通过一种特殊的...对于任何Java开发者来说,理解和熟练运用这两个工具都是非常重要的。
ASP技术是Active Server Pages的缩写,是一种由微软开发的服务器端脚本环境,用于创建动态交互式网页。...在实际操作中,应结合具体需求和目标站点特性,灵活运用相关工具和方法,确保高效且合规地完成任务。
总的来说,“Lucene实现的数码产品垂直搜索引擎”是一个综合运用了Lucene全文检索能力、HTMLParser的网页解析以及DWZ前端框架的项目,旨在提供高效、精准的数码产品搜索服务。通过这样的垂直搜索引擎,用户可以更快...
它支持多种解析器,包括Python标准库中的HTMLParser和lxml等。 3. **Scrapy**:这是一个高级爬虫框架,它不仅提供了完整的爬虫流程,还支持异步处理、中间件扩展等功能。使用Scrapy可以轻松地构建复杂的爬虫项目。...
在Android开发中,解析HTML是常见的任务之...在实际开发中,理解并熟练运用这些知识点,将有助于我们更高效地使用"AndroidHTMLParser"或者其他类似的HTML解析库,实现从网页中提取所需信息,提升应用的功能和用户体验。
它综合运用了多种技术,如网络爬虫Heritrix、HTML解析库HTMLParser、关系型数据库MySQL、全文检索引擎Lucene以及Web开发技术JSP,实现了对手机信息的垂直搜索功能。这一设计不仅满足了用户查找特定手机信息的需求,...
- **HTMLParser**:用于解析HTML文档,提取所需的元数据。 - **SQL Server**:用于存储处理后的新闻数据。 - **ExtJS**:一个开源的AJAX框架,用于构建丰富的前端用户界面。 #### 四、核心模块实现 1. **网络爬虫...
- `htmlparser.inc`, `htmlgrammarparser.inc` 和 `common.inc` 是库的核心代码文件,包含了解析器的实现。 - `imgsrcchange.inc` 可能是针对图片源(img src)处理的特定功能或示例。 - `testhtmlparser.php` 是...
本文旨在对Python的部分重要库进行详细介绍,帮助读者更好地理解和运用这些工具。 ### 数据处理 #### Chardet - **简介**:字符编码探测器,能够自动检测文本、网页、XML等的编码方式。 - **应用场景**:在网络...
这一步通常借助HTML解析库,如HTMLParser或正则表达式完成。易语言中可能需要自定义函数来处理特定的HTML标签和属性。 3. **数据提取**:识别出特定的帖子元素后,通过DOM(文档对象模型)操作,提取所需的数据。...
- **3.1.4 使用HTMLParser实现定向抓取**:讲解了如何使用HTML解析器实现目标内容的抓取。 - **3.1.5 使用正则表达式提取数据**:介绍了正则表达式在数据抽取中的应用。 - **3.1.6 结构化信息提取**:探讨了如何...
- Winista.HtmlParser.dll:可能是一个HTML解析器,用于处理和解析HTML内容。 - Interop.SHDocVw.dll和Interop.Shell32.dll:这些是.NET与COM组件交互的接口,可能用于与Windows Shell和Web浏览器对象进行通信。 - ...