- 浏览: 1031530 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (605)
- 数据挖掘 (22)
- spring (40)
- 工具使用 (39)
- java (137)
- JavaScript (40)
- webwork (12)
- web (120)
- 资源 (7)
- SSH (5)
- oracle (20)
- J2ME (1)
- 环境配置 (37)
- 项目管理 (29)
- mysql (14)
- struts (4)
- 项目总结 (27)
- ibatis学习 (33)
- 学习计划 (2)
- 缓存 (7)
- 重构 (3)
- Android (1)
- jquery (12)
- UML (3)
- 用户体验 (4)
- 习惯 (7)
- sakai (1)
- urlrewrite (4)
- rss (5)
- C plus plus (5)
- 算法 (5)
- 海量数据处理 (7)
- office(word、excel) (1)
- 面试题 (3)
- solr (8)
- 大数据 (2)
最新评论
-
hujin19861102:
截图看不见,最后一个webwrok的配置看不见
Ext+Webwork+Json 实现分页表格查询效果 -
蜗牛笔:
弱弱的问一句,要是分出来的词在词典中没有,那么两部分的pos- ...
ICTCLAS 中科院分词系统 -
weipeng1986:
授人予鱼不如授人予鱼,我想问你的是你是怎么总结的。比如第四种情 ...
JAVA中字符串连接效率的测试 -
xiaoqiang2008:
执行两次的原因是什么,好像楼主没弄清楚啊!是不是在web.xm ...
关于Spring中用quartz定时器在定时到达时同时执行两次的问题 -
Kent_Mu:
...
ibatis-dynamic的用法
http://express.ruanko.com/ruanko-express_44/technologyexchange6.html
htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。Htmlparser相对于其他html解析工具有较好的优势,它能超高速解析html,而且不会出错。
我用一段代码简单介绍htmlparser的运用方法。
public Node[] getNodes(String htmls, String tagTyp, String charset) { Parser parser = Parser.createParser(htmls, charset); NodeFilter filter = new TagNameFilter(tagTyp); NodeList nodeList; try { nodeList = parser.parse(filter); return nodeList.toNodeArray(); } catch (ParserException e) { e.printStackTrace(); } } |
首先使用流将html内容读取出来,放入解析对象中并设置字符编码,这里我解析的是三大大型招聘网的简历数据,由于每个网站的简历编码方式不同,所以在解析内容的时候需要指定不同的字符编码,而且指定编码集的时候只有通过查找三大网站文件<head></head>中的内容不同而指定字符编码,这是一个让人比较头痛的问题。
代码中的filter对象主要用来过滤标签获取标签中的内容,如:将tagtyp参数替换成<table>那么它会将文件中所有<table></table>中的文本内容获取出来,接下来要做的只要遍历节点集合就可以了。如果节点中还有节点,可以继续更深一层过滤。Htmlparser的主要作用也就在这里。而真正在我的项目中仅仅依靠过滤来达到想要的效果还是有一定距离的,每个html文件的布局不同,解析的流程也就不同,所以不能像一般程序那样方法复用(这里我说的是获取真正想要的内容时,过滤标签的代码还是可以复用的)。而真正获取想要文件内容时还得需要使用关键字匹配的方式来实现。虽然操作比较麻烦,但毕竟可以达到想要的效果。
Htmlparser对html文件的解析处理结构
HtmlParser采用了经典的Composite模式,通过RemarkNode、TextNode、TagNode、AbstractNode和Tag来描述HTML页面各元素。
org.htmlparser.Node:
- 节点到html文本、text文本的方法:toPlainTextString、toHtml
- 典型树形结构遍历的方法:getParent、getChildren、getFirstChild、getLastChild、getPreviousSibling、getNextSibling、getText
- 获取节点对应的树形结构结构的顶级节点Page对象方法:getPage
- 获取节点起始位置的方法:getStartPosition、getEndPosition
- Visitor方法遍历节点时候方法:accept (NodeVisitor visitor)
- Filter方法:collectInto (NodeList list, NodeFilter filter)
- Object方法:toString、clone
org.htmlparser.nodes.AbstractNode:
AbstractNode是形成HTML树形结构抽象基类,实现了Node接口。
在htmlparser中,Node分成三类:
- RemarkNode:代表Html中的注释
- TagNode:标签节点
- TextNode:文本节点
这三类节点都继承AbstractNode。
org.htmlparser.nodes.TagNode:
TagNode包含了对HTML处理的核心的各个类,是所有TAG的基类,其中有分为包含其他TAG的复合节点ComositeTag和不包含其他TAG的叶子节点Tag。
复合节点CompositeTag:
AppletTag,BodyTag,Bullet,BulletList,DefinitionList,DefinitionListBullet,Div,FormTag,FrameSetTag,HeadingTag, HeadTag,Html,LabelTag,LinkTag,ObjectTag,ParagraphTag,ScriptTag,SelectTag,Span,StyleTag,TableColumn, TableHeader,TableRow,TableTag,TextareaTag,TitleTag |
叶子节点TAG:
BaseHrefTag,DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag, |
htmlparser对html页面处理的算法
主要是如下几种方式:
采用Visitor方式访问Html
try { Parser parser = new Parser(); parser.setURL(”http://www.google.com”); parser.setEncoding(parser.getEncoding()); NodeVisitor visitor = new NodeVisitor() { public void visitTag(Tag tag) { logger.fatal(”testVisitorAll() Tag name is :” + tag.getTagName() + ” \n Class is :” + tag.getClass()); } }; parser.visitAllNodesWith(visitor); } catch (ParserException e) { e.printStackTrace(); } |
采用Filter方式访问html
try { NodeFilter filter = new NodeClassFilter(LinkTag.class); Parser parser = new Parser(); parser.setURL(”http://www.google.com”); parser.setEncoding(parser.getEncoding()); NodeList list = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < list.size(); i++) { LinkTag node = (LinkTag) list.elementAt(i); logger.fatal(”testLinkTag() Link is :” + node.extractLink()); } } catch (Exception e) { e.printStackTrace(); } |
采用org.htmlparser.beans方式
另外htmlparser 还在org.htmlparser.beans中对一些常用的方法进行了封装,以简化操作,例如:
Parser parser = new Parser(); LinkBean linkBean = new LinkBean(); linkBean.setURL(”http://www.google.com”); URL[] urls = linkBean.getLinks(); for (int i = 0; i < urls.length; i++) { URL url = urls[i]; logger.fatal(”testLinkBean() -url is :” + url); } |
htmlparser关键包结构说明
htmlparser其实核心代码并不多,好好研究一下其代码,弥补文档不足的问题。同时htmlparser的代码注释和单元测试用例还是很齐全的,也有助于了解htmlparser的用法。
org.htmlparser
定义了htmlparser的一些基础类。其中最为重要的是Parser类。
Parser是htmlparser的最核心的类,其构造函数提供了如下:Parser.createParser (String html, String charset)、 Parser ()、Parser (Lexer lexer, ParserFeedback fb)、Parser (URLConnection connection, ParserFeedback fb)、Parser (String resource, ParserFeedback feedback)、 Parser (String resource)。
各构造函数的具体用法及含义可以查看其代码,很容易理解。
Parser常用的几个方法:
elements获取元素
Parser parser = new Parser (”http://www.google.com”); for (NodeIterator i = parser.elements (); i.hasMoreElements (); ) processMyNodes (i.nextNode ()); |
- parse (NodeFilter filter):通过NodeFilter方式获取
- visitAllNodesWith (NodeVisitor visitor):通过Nodevisitor方式
- extractAllNodesThatMatch (NodeFilter filter):通过NodeFilter方式
org.htmlparser.beans
对Visitor和Filter的方法进行了封装,定义了针对一些常用html元素操作的bean,简化对常用元素的提取操作。
包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。
org.htmlparser.nodes
定义了基础的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。
org.htmlparser.tags
定义了htmlparser的各种tag。
org.htmlparser.filters
定义了htmlparser所提供的各种filter,主要通过extractAllNodesThatMatch (NodeFilter filter)来对html页面指定类型的元素进行过滤,包括:AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter。
org.htmlparser.visitors
定义了htmlparser所提供的各种visitor,主要通过visitAllNodesWith (NodeVisitor visitor)来对html页面元素进行遍历,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、TextExtractingVisitor、UrlModifyingVisitor。
org.htmlparser.parserapplications
定义了一些实用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,这几个类也可以作为htmlparser使用样例。
org.htmlparser.tests
对各种功能的单元测试用例,也可以作为htmlparser使用的样例。
发表评论
-
fork/join框架
2017-03-09 11:03 463http://blog.csdn.net/ye1992/art ... -
protobuffer
2017-03-09 10:54 617http://blog.csdn.net/antgan/art ... -
整理上传代码容易忽略的注意事项
2013-08-31 11:28 1088每个公司都有自己的代码代码上传流程:如果打包发布的话,是不存 ... -
mysql版本升级引发的问题
2013-05-16 15:25 1622问题描述: 1. ibatis 中 mysql语 ... -
网站的记住密码功能设计
2013-02-27 19:09 1275http://greenyouyou.blog.163 ... -
大型网站架构演变之路
2013-02-27 19:08 1114http://www.cnblogs.com/ivanjack ... -
使用Filter统计Java(J2EE)的web程序http请求响应时间
2013-02-27 19:07 1352http://www.cnblogs.com/ivan ... -
java bean与xml相互转换
2013-02-06 10:27 2009最近在做的项目,在各个平台之间需要大量传输数据,且结构比较 ... -
java 反射
2013-01-14 18:21 790http://www.cnblogs.com/rollenh ... -
firefox 兼容两个小细节
2012-12-29 10:38 13021. 火狐下radio无法选中问题 描述: 当JS ... -
字符串替换
2012-12-17 11:17 1121高效的字符串模式替换实现效果如下 String str ... -
httpURLConnection获取网络数据:XML格式返回与Json格式返回
2012-12-15 16:57 148821.服务器端代码样例: public class ... -
利用Freemarker实现表到功能界面的一键生成
2012-11-22 18:03 983利用Freemarker实现表到功能界面的一键生成 h ... -
专业的网页测试工具 YSLOW
2012-11-07 19:41 891http://guangqiang.iteye.com/blo ... -
freemarker 静态化网页
2012-11-07 19:39 1168freemarker的作用: MVC框架 ... -
ibatis in ##的问题
2012-11-02 13:25 791http://www.hake.cc/a/biancheng/ ... -
基本CSS选择器,复合选择器,后代选择器
2012-11-02 13:23 1018http://gaterking.blog.51cto. ... -
webwork <ww:url> 转 jstl <c:url>标签
2012-11-02 11:06 2161项目之前分页组件一直使用的是 项目组定义的 公用分页,其中引用 ... -
CSS 图片拼合生成器
2012-11-02 10:53 1807CSS 图片拼合生成器在线 工具(已测试使用,基本满足网站对s ... -
ibatis缓存强制刷新与命中率
2012-10-19 19:06 1360缓存强制刷新: // spring注入 private Sq ...
相关推荐
主要介绍了Python中使用HTMLParser解析html实例,本文直接给出使用示例,并总结出HTMLParser含有的方法分为两类,一类是需要显式调用的,而另一类不需显示调用,需要的朋友可以参考下
主要介绍了在Python中使用HTMLParser解析HTML的教程,尤其是在用Python制作爬虫程序的时候经常可以用到,需要的朋友可以参考下
htmlparser(HTML页面解析)例子
如何在Java程序中利用正则表达式实现对字符串的解析.另外,HTMLParser是一款很强大的对HTML网页进行解析的工具,其中大量地用到正则表达式.
htmlparser是一款小而强大的解析Html 的第三方工具包,内含jar包和源文件包(两个),htmlparser1.6.jar,htmlparser1.6_src.jar,非常有用的
Html解析助手htmlparser.jar。Html解析助手htmlparser.jar
htmlparser解析html,获得需要的字段
NULL 博文链接:https://sunfish.iteye.com/blog/1317467
HTMLParser HTML解析 HTMLParser HTML解析 HTMLParser HTML解析
Java使用HtmlParser抓取网页数据并解析
HtmlParser.Net是来源于Java的一个用来解析html的组件,主要用于改造或提取html。它能够高速解析html,是非常好的一个html解析和分析工具。 这个是.Net版本包括源代码和帮助文档。 版本:HTMLParser.Net - Community...
HTML文档解析器 HTMLParser
用htmlparser解析html的所有jar包,非常全!
基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于...
android 解析html (htmlParser)库和源码 因为一个项目需要解析一个网站上的新闻,所以找到了htmlParser这个开源的项目,删除了一些不需要的包,使其可以在android上用。 有两个工程,myhtml是库,要把它包含到...
按DOM模型解析html文件的工具包 已下是源码列表: META-INF/MANIFEST.MF META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class ...
它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。 毫不夸张地说,htmlparser就是目前最好的html解析和分析的工具。 无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。
跨平台的Html解析代码_武稀松_HtmlParser.rar