`
synchronized_lala
  • 浏览: 41099 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

htmlparser页面解析(基础运用)

阅读更多
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&amp;Name=%e6%9b%be%e5%b0%8f%e5%b3%b0">曾小峰</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&amp;Name=%e8%89%be%e8%84%89%e5%85%b4">艾脉兴</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&amp;Name=%e7%94%98%e6%99%93%e4%b8%b9">甘晓丹</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&amp;Name=%e5%8f%b2%e8%89%b3%e8%90%8d">史艳萍</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&amp;Name=%e5%ae%8b%e7%90%b4%e8%8a%b3">宋琴芳</a><a target="_blank" href="http://social.wanfangdata.com.cn/Locate.ashx?ArticleId=zhfsbx98200105004&amp;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的抽象函数。
5
1
分享到:
评论
10 楼 kisseveryone 2012-09-06  
Document doc = Jsoup.connect("http://www.google.com.hk/webhp?hl=zh-CN#hl=zh-CN&newwindow=1&safe=strict&site=webhp&source=hp&q=site:iteye.com&oq=site:iteye.com").get();
System.out.println(doc.html());

出来的居然是google首页,完全不是正确的页面,而且连接的时候cpu还老高的
不好用啊
9 楼 damoqiongqiu 2012-08-07  
不错,制作Ext2.2 CHM文档时玩过的人淡淡飘过
8 楼 nanjingjiangbiao 2012-08-07  
留名,以后超你的代码
7 楼 chan.d 2012-08-07  
JsouP is best
6 楼 malie0 2012-08-07  
感觉jsoup更加好用,不过jsoup好像不能解析BR标签,而且这些解析工具似乎都是把html先格式化再解析的,这样会有问题
5 楼 redwave 2012-08-07  
一直在用jsoup,htmlparser也用过,说htmlparser是最好的html解析工具,实在不敢苟同
4 楼 ddrisme 2012-08-07  
jsoup笑而不语
3 楼 synchronized_lala 2012-08-07  
fengx 写道
使用jsoup也不错

这样啊,今天我去学习下jsoup
2 楼 langyahuashi 2012-08-07  
fengx 写道
使用jsoup也不错

是的,而且htmlparser这个快5年不更新了
1 楼 fengx 2012-08-07  
使用jsoup也不错

相关推荐

    html解析两个jar htmllexer.jar htmlparser.jar

    2. **网页自动化**:在自动化测试或爬虫中,这两个库可以用于理解页面结构,触发交互元素,如按钮或表单。 3. **内容过滤与清理**:清理HTML中的广告代码、脚本或者不安全的元素,提供更纯净的数据。 4. **格式化和...

    htmlparser实现从网页上抓取数据.pdf

    2. **解析模式**:HTMLParser有两种主要的解析模式:DOM解析和事件驱动解析。DOM解析将整个HTML文档转化为一个可操作的对象树,而事件驱动解析则是在解析过程中触发一系列事件,比如遇到标签开始、结束或者文本等。 ...

    MZnauka-2_htmlparser_zip_

    【标题】"MZnauka-2_htmlparser_zip_" 指的是一个关于HTML解析的课程资源包,其中包含了利用某种HTML解析器处理HTML文档的相关教学内容。这个压缩包可能是为了便于用户下载和学习,整合了一系列的教学材料。 【描述...

    歌曲链接提取和下载(htmlparser 和http下载)

    本项目聚焦于通过HTMLParser库解析HTML页面,提取特定信息,特别是歌曲链接,并利用HTTP下载这些资源。以下将详细讲解涉及的知识点: 首先,**HTMLParser** 是Python中用于解析HTML文档的内建库。它提供了一个基础...

    HttpClient ,jsoup和 HtmlParser ,htmllexer实现简易爬虫用到的jar包

    jsoup能解析HTML字符串或者从URL加载页面,然后通过选择器选择元素,提取所需数据,甚至还能修正不规范的HTML。在爬虫项目中,jsoup是解析网页内容、提取结构化数据的关键工具,它可以高效地抓取和处理网页中的链接...

    DIHtmlParser_5.0.0.rar_Parser_htmlparser

    《Delphi Inspiration HTML Parser 深度解析》 在IT领域,HTML解析是网页数据抽取、网站自动化测试...通过理解和运用这个库,开发者可以更高效地进行网页数据抓取、页面自动化测试等任务,提升项目开发的效率和质量。

    Java正则表达式入门 + HTMLParser使用详解.ppt

    Java正则表达式是编程语言Java中用于处理字符串的强大工具,尤其在文本处理、数据验证和数据提取等方面具有广泛的应用。正则表达式通过一种特殊的...对于任何Java开发者来说,理解和熟练运用这两个工具都是非常重要的。

    ASP技术常遇问题解答-如何捕获人家站点的页面?.zip

    ASP技术是Active Server Pages的缩写,是一种由微软开发的服务器端脚本环境,用于创建动态交互式网页。...在实际操作中,应结合具体需求和目标站点特性,灵活运用相关工具和方法,确保高效且合规地完成任务。

    Lucene实现的数码产品垂直搜索引擎

    总的来说,“Lucene实现的数码产品垂直搜索引擎”是一个综合运用了Lucene全文检索能力、HTMLParser的网页解析以及DWZ前端框架的项目,旨在提供高效、精准的数码产品搜索服务。通过这样的垂直搜索引擎,用户可以更快...

    python爬虫基础知识、爬虫实例、反爬机制等资源.docx

    它支持多种解析器,包括Python标准库中的HTMLParser和lxml等。 3. **Scrapy**:这是一个高级爬虫框架,它不仅提供了完整的爬虫流程,还支持异步处理、中间件扩展等功能。使用Scrapy可以轻松地构建复杂的爬虫项目。...

    AndroidHTMLParser

    在Android开发中,解析HTML是常见的任务之...在实际开发中,理解并熟练运用这些知识点,将有助于我们更高效地使用"AndroidHTMLParser"或者其他类似的HTML解析库,实现从网页中提取所需信息,提升应用的功能和用户体验。

    搜索引擎的开发论文(毕业设计)

    它综合运用了多种技术,如网络爬虫Heritrix、HTML解析库HTMLParser、关系型数据库MySQL、全文检索引擎Lucene以及Web开发技术JSP,实现了对手机信息的垂直搜索功能。这一设计不仅满足了用户查找特定手机信息的需求,...

    新闻爬虫系统的设计与实现毕业论文设计.docx

    - **HTMLParser**:用于解析HTML文档,提取所需的元数据。 - **SQL Server**:用于存储处理后的新闻数据。 - **ExtJS**:一个开源的AJAX框架,用于构建丰富的前端用户界面。 #### 四、核心模块实现 1. **网络爬虫...

    PHP HTML parser-开源

    - `htmlparser.inc`, `htmlgrammarparser.inc` 和 `common.inc` 是库的核心代码文件,包含了解析器的实现。 - `imgsrcchange.inc` 可能是针对图片源(img src)处理的特定功能或示例。 - `testhtmlparser.php` 是...

    Python所有的库都在这里了!!强烈建议收藏.docx

    本文旨在对Python的部分重要库进行详细介绍,帮助读者更好地理解和运用这些工具。 ### 数据处理 #### Chardet - **简介**:字符编码探测器,能够自动检测文本、网页、XML等的编码方式。 - **应用场景**:在网络...

    易语言-精易论坛帖子提取

    这一步通常借助HTML解析库,如HTMLParser或正则表达式完成。易语言中可能需要自定义函数来处理特定的HTML标签和属性。 3. **数据提取**:识别出特定的帖子元素后,通过DOM(文档对象模型)操作,提取所需的数据。...

    解密搜索引擎技术实战:Lucene&Java精华版

    - **3.1.4 使用HTMLParser实现定向抓取**:讲解了如何使用HTML解析器实现目标内容的抓取。 - **3.1.5 使用正则表达式提取数据**:介绍了正则表达式在数据抽取中的应用。 - **3.1.6 结构化信息提取**:探讨了如何...

    lsdjrj_v3.17.rar_PHP编程_PHP__PHP编程_PHP_

    - Winista.HtmlParser.dll:可能是一个HTML解析器,用于处理和解析HTML内容。 - Interop.SHDocVw.dll和Interop.Shell32.dll:这些是.NET与COM组件交互的接口,可能用于与Windows Shell和Web浏览器对象进行通信。 - ...

    利搜网站排名 v2.59

    - `Winista.HtmlParser.dll` 可能是一个HTML解析器,用于处理和分析网页内容。 - `Interop.SHDocVw.dll` 和 `Interop.Shell32.dll` 是与Internet Explorer交互的接口,可能用于模拟浏览器操作。 4. **网络爬虫...

Global site tag (gtag.js) - Google Analytics