- 浏览: 167930 次
- 来自: ...
文章分类
最新评论
-
hellostory:
不知所云………………
如何使用反射访问类的private域和方法 -
xusong_zidingyi:
如果在linux下面的话就没有办法运行了,因为linux没有办 ...
使用tesseract破解checkCode -
javajava22:
Errors accessing files. There m ...
使用tesseract破解checkCode -
suncathay:
qljobs 写道cmd.add("E:/Works ...
使用tesseract破解checkCode -
zuoxu128:
TIFFImageWriteParam ,这个类是哪个包的啊
使用tesseract破解checkCode
闲来无事,搞搞htmlParser,本想将内容发到手机上,后来未成,只是将杭州的天气情况拼装好了。
import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; public class MyWeatherTest { private static final Logger logger = Logger.getLogger(MyWeatherTest.class); private static String PARSE_CITY = "杭州"; private static String CLASS_NODE = "class"; private static String CLASS_CITY = "w365"; private static String CLASS_DAY = "everyDay"; private static String CLASS_DAY_ELSE = "everyDayelse"; private static String TEXT_MSG = "$CITY明天$DATE$STATUS,温度为$$TMPT;后天$DATE$STATUS,温度为$TMPT 中央气象局 $LAST_MODIFY_TIME"; private static Map<String, String> cityURLMap = new HashMap(); static { cityURLMap.put(PARSE_CITY, "http://www.nmc.gov.cn/publish/forecast/AZJ/hangzhou.html"); } public static void main(String[] args) { Parser parser; NodeFilter filter; String text = TEXT_MSG.replaceFirst("\\$CITY", PARSE_CITY); int start = 1; Node[] nodes = new Node[2]; try { // 如果当天的class为everyDayelse,则start值减1 parser = new Parser(cityURLMap.get(PARSE_CITY)); parser.setEncoding(parser.getEncoding()); NodeFilter filterElse = new HasAttributeFilter(CLASS_NODE, CLASS_DAY_ELSE); if (parser.extractAllNodesThatMatch(filterElse).size() > 0) { start--; } // 取出后面两天的内容div parser = new Parser(cityURLMap.get(PARSE_CITY)); parser.setEncoding(parser.getEncoding()); filter = new HasAttributeFilter(CLASS_NODE, CLASS_DAY); NodeList list1 = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < 2; i++) { nodes[i] = list1.elementAt(start); start++; // logger.fatal(list.elementAt(i).toHtml()); } // 将内容 for (int i = 0; i < 2; i++) { String content = nodes[i].toPlainTextString().replaceAll("[ ]|[\t]", ""); //填充日期 String[] str = content.split("\\\n"); text = text.replaceFirst("\\$DATE", str[1]); //填充天气 if (str[6].equals(str[7])) { text = text.replaceFirst("\\$STATUS", str[6]); } else { text = text.replaceFirst("\\$STATUS", str[6] + "转" + str[7]); } //填充温度 if(str[8].contains("低温")){ text = text.replaceFirst("\\$TMPT", str[8].replace("高温", "").replace("低温", "-")); }else{ text = text.replaceFirst("\\$TMPT", str[8].replace("高温", "")+str[9].replace("低温", "-")); } } // 取出后面两天的内容div parser = new Parser(cityURLMap.get(PARSE_CITY)); parser.setEncoding(parser.getEncoding()); filter = new HasAttributeFilter(CLASS_NODE, CLASS_CITY); NodeList list2 = parser.extractAllNodesThatMatch(filter); for (int i = 0; i <list2.size(); i++) { String myStr=list2.elementAt(i).toPlainTextString().replaceAll("[ ]|[\t]|[\n]|[\\ ]", ""); if(myStr.indexOf("最后更新时间")==0){ text = text.replaceFirst("\\$LAST_MODIFY_TIME", myStr); } } System.out.println(text); } catch (ParserException e) { e.printStackTrace(); } } }
可以跑起来,不过代码写得很烂,主要参考的是以下的代码:
import java.net.URL; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.Tag; import org.htmlparser.beans.LinkBean; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.HeadTag; import org.htmlparser.tags.ImageTag; import org.htmlparser.tags.InputTag; import org.htmlparser.tags.LinkTag; import org.htmlparser.tags.OptionTag; import org.htmlparser.tags.SelectTag; import org.htmlparser.tags.TableColumn; import org.htmlparser.tags.TableRow; import org.htmlparser.tags.TableTag; import org.htmlparser.tags.TitleTag; import org.htmlparser.util.NodeIterator; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.visitors.HtmlPage; import org.htmlparser.visitors.NodeVisitor; import org.htmlparser.visitors.ObjectFindingVisitor; public class ParserTestCase extends TestCase { private static final Logger logger = Logger.getLogger(ParserTestCase.class); public ParserTestCase(String name) { super(name); } /* * 测试ObjectFindVisitor的用法 */ public void testImageVisitor() { try { ImageTag imgLink; ObjectFindingVisitor visitor = new ObjectFindingVisitor( ImageTag.class); Parser parser = new Parser(); parser.setURL("http://profile.china.alibaba.com/user/dengminhui12.html"); parser.setEncoding(parser.getEncoding()); parser.visitAllNodesWith(visitor); Node[] nodes = visitor.getTags(); logger.fatal("result of testImageVisitor : size = " + nodes.length); for (int i = 0; i < nodes.length; i++) { imgLink = (ImageTag) nodes[i]; logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL()); } } catch (Exception e) { e.printStackTrace(); } } /* * 测试TagNameFilter用法 */ public void testNodeFilter() { try { NodeFilter filter = new TagNameFilter("IMG"); Parser parser = new Parser(); parser.setURL("http://profile.china.alibaba.com/user/dengminhui12.html"); parser.setEncoding(parser.getEncoding()); NodeList list = parser.extractAllNodesThatMatch(filter); logger.fatal("result of testNodeFilter : size = " + list.size()); for (int i = 0; i < list.size(); i++) { logger.fatal("testNodeFilter() " + list.elementAt(i).toHtml()); } } catch (Exception e) { e.printStackTrace(); } } /* * 测试NodeClassFilter用法 */ public void testLinkTag() { try { NodeFilter filter = new NodeClassFilter(LinkTag.class); Parser parser = new Parser(); parser.setURL("http://profile.china.alibaba.com/user/dengminhui12.html"); parser.setEncoding(parser.getEncoding()); NodeList list = parser.extractAllNodesThatMatch(filter); logger.fatal("result of testLinkTag : size = " + list.size()); 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(); } } /* * 测试<link href=" text=’text/css’ rel=’stylesheet’ />用法 */ public void testLinkCSS() { try { Parser parser = new Parser(); parser .setInputHTML("<head><title>Link Test</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />" + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>"); parser.setEncoding(parser.getEncoding()); NodeList nodeList = null; for (NodeIterator e = parser.elements(); e.hasMoreNodes();) { Node node = e.nextNode(); logger .fatal("testLinkCSS()" + node.getText() + node.getClass()); } } catch (Exception e) { e.printStackTrace(); } } /* * 测试OrFilter的用法 */ public void testOrFilter() { NodeFilter inputFilter = new NodeClassFilter(InputTag.class); NodeFilter selectFilter = new NodeClassFilter(SelectTag.class); Parser myParser; NodeList nodeList = null; try { Parser parser = new Parser(); parser .setInputHTML("<head><title>OrFilter Test</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />" + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>" + "<input type=’text’ value=’text1′ name=’text1′/>" + "<input type=’text’ value=’text2′ name=’text2′/>" + "<select><option id=’1′>1</option><option id=’2′>2</option><option id=’3′></option></select>" + "<a href=’http://www.yeeach.com’>yeeach.com</a>" + "</body>"); parser.setEncoding(parser.getEncoding()); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { selectFilter, inputFilter }); nodeList = parser.parse(lastFilter); for (int i = 0; i <= nodeList.size(); i++) { if (nodeList.elementAt(i) instanceof InputTag) { InputTag tag = (InputTag) nodeList.elementAt(i); logger.fatal("OrFilter tag name is :" + tag.getTagName() + " ,tag value is:" + tag.getAttribute("value")); } if (nodeList.elementAt(i) instanceof SelectTag) { SelectTag tag = (SelectTag) nodeList.elementAt(i); NodeList list = tag.getChildren(); for (int j = 0; j < list.size(); j++) { OptionTag option = (OptionTag) list.elementAt(j); logger .fatal("OrFilter Option" + option.getOptionText()); } } } } catch (ParserException e) { e.printStackTrace(); } } /* * 测试对<table><tr><td></td></tr></table>的解析 */ public void testTable() { Parser myParser; NodeList nodeList = null; myParser = Parser.createParser("<body> " + "<table id=’table1′ >" + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id=’table2′ >" + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>", "GBK"); NodeFilter tableFilter = new NodeClassFilter(TableTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { tableFilter }); try { nodeList = myParser.parse(lastFilter); for (int i = 0; i <= nodeList.size(); i++) { if (nodeList.elementAt(i) instanceof TableTag) { TableTag tag = (TableTag) nodeList.elementAt(i); TableRow[] rows = tag.getRows(); for (int j = 0; j < rows.length; j++) { TableRow tr = (TableRow) rows[j]; TableColumn[] td = tr.getColumns(); for (int k = 0; k < td.length; k++) { logger.fatal("<td>" + td[k].toPlainTextString()); } } } } } catch (ParserException e) { e.printStackTrace(); } } /* * 测试NodeVisitor的用法,遍历所有节点 */ public void testVisitorAll() { try { Parser parser = new Parser(); parser.setURL("http://profile.china.alibaba.com/user/dengminhui12.html"); 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(); } } /* * 测试对指定Tag的NodeVisitor的用法 */ public void testTagVisitor() { try { Parser parser = new Parser( "<head><title>dddd</title>" + "<link href=’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />" + "<link href=’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />" + "</head>" + "<body>" + "<a id='hah' href=’http://www.yeeach.com’>yeeach.com</a>" + "</body>"); NodeVisitor visitor = new NodeVisitor() { public void visitTag(Tag tag) { if (tag instanceof HeadTag) { logger.fatal("visitTag() HeadTag : Tag name is :" + tag.getTagName() + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()); } else if (tag instanceof TitleTag) { logger.fatal("visitTag() TitleTag : Tag name is :" + tag.getTagName() + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()); } else if (tag instanceof LinkTag) { logger.fatal("visitTag() LinkTag : Tag name is :" + tag.getTagName() + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText() + " \n getAttribute is :" + tag.getAttribute("href")); } else { logger.fatal("visitTag() : Tag name is :" + tag.getTagName() + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()); } } }; parser.visitAllNodesWith(visitor); } catch (Exception e) { e.printStackTrace(); } } /* * 测试HtmlPage的用法 */ public void testHtmlPage() { String inputHTML = "<html>" + "<head>" + "<title>Welcome to the HTMLParser website</title>" + "</head>" + "<body>" + "Welcome to HTMLParser" + "<table id=’table1′ >" + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id=’table2′ >" + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>" + "</html>"; Parser parser = new Parser(); try { parser.setInputHTML(inputHTML); parser.setEncoding(parser.getURL()); HtmlPage page = new HtmlPage(parser); parser.visitAllNodesWith(page); logger.fatal("testHtmlPage -title is :" + page.getTitle()); NodeList list = page.getBody(); for (NodeIterator iterator = list.elements(); iterator .hasMoreNodes();) { Node node = iterator.nextNode(); logger.fatal("testHtmlPage -node is :" + node.toHtml()); } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 测试LinkBean的用法 */ public void testLinkBean() { Parser parser = new Parser(); LinkBean linkBean = new LinkBean(); linkBean.setURL("http://profile.china.alibaba.com/user/dengminhui12.html"); URL[] urls = linkBean.getLinks(); for (int i = 0; i < urls.length; i++) { URL url = urls[i]; logger.fatal("testLinkBean() -url is :" + url); } } }
- htmlParser所需lib.rar (2.5 MB)
- 下载次数: 241
发表评论
-
一些随想
2012-06-01 22:05 0需求 idea 方案 执 ... -
Redis的安装与使用
2011-10-24 20:04 1292今天看了下redis相关的东东,做个备忘。 Re ... -
Redis的安装与使用
2011-10-24 20:00 0Redis 服务端: http://cocos.iteye. ... -
GenericDAO
2011-07-31 14:49 0GenericDAO -
loadfromproperties
2011-07-31 14:48 0loadfromproperties -
resultcode
2011-07-31 14:47 0resultcode -
berkeleydb的使用
2011-10-24 20:05 1883在napoli的代码中发现这个berkeleydb,版本为3. ... -
几种简单的Load Balance方法
2011-07-31 13:44 0以下代码出自napoli (1)定义Selec ... -
参数断言工具
2011-07-31 12:58 952见代码: public final class Argume ... -
如何检测线上代码的运行情况---BTrace使用分享
2011-04-10 17:36 2087(1)你是否有时发现线上的代码运行效率不高,但却无法定位到底具 ... -
napoli和JMS,mq的一些知识
2010-11-26 21:01 01 jms和mq (1)jms activeMQ 应用 h ... -
Taglib基础知识
2010-11-26 12:41 0浅论taglib设计 : http://wenku.bai ... -
java编码问题的一些文章
2010-11-11 17:30 0http://www.iteye.com/topic/8047 ... -
URL在转码的过程中数据丢失
2010-10-25 14:52 0示例代码 import java.io.Unsuppo ... -
遍历大容量map的正确方法
2010-10-08 13:20 11192首先,遍历map有以下方法: import java.uti ... -
B2B-Code Review规范
2010-08-31 10:15 01.目标 凡事知其然还要知其所以然,我们首先需要知道什么 ... -
多线程书写及code review规范
2010-08-31 10:09 14501. 不允许将Calendar用于类的静态成员 ... -
域名白名单检查
2010-08-24 21:05 0首先准备一份白名单名为safe-domain.xml ,如下: ... -
如何使用反射访问类的private域和方法
2010-08-17 21:44 5132如何使用反射访问类的private域和方法?非常简单,由 ... -
FindBugs插件的安装与使用
2010-04-21 10:54 19141 什么是FindBugs FindBugs 是一个静态分析 ...
相关推荐
HTMLParser是一个Java库,用于解析HTML文档,提取和处理数据,这对于构建简易爬虫非常有用。...通过理解和熟练使用HTMLParser,开发者可以有效地抓取和处理大量网页数据,为数据分析、信息提取等应用场景提供支持。
### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...
通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm`帮助文档是宝贵的参考资料,包含了详细的API说明和技术细节。记住,理解并熟练...
1. **初始化解析器**:首先创建HtmlParser实例。 2. **加载HTML文档**:将目标网页的HTML内容加载到解析器中。 3. **遍历节点**:遍历解析后的Node树,查找包含超链接信息的特定节点。 4. **提取链接信息**:从找到...
在这个实例中,我们将探讨如何结合C#中的正则表达式(Regular Expressions)和HTMLParser来高效地从网页中抓取所需数据。 首先,让我们了解什么是正则表达式。正则表达式是一种模式匹配工具,用于在字符串中查找、...
【Python爬虫实现爬取百度百科词条功能实例】 在Python编程中,爬虫是一种用于自动抓取互联网上信息的程序,常用于数据挖掘、搜索引擎优化和市场研究等领域。本实例主要讲解如何使用Python编写爬虫来抓取百度百科中...
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...
总的来说,【51job职位信息爬取器】是一个实用的工具,结合了Java编程、HTMLParser解析技术和网络爬虫策略,帮助用户高效地获取51job网站上的招聘信息。如果你对网络爬虫、数据抓取或者Java编程感兴趣,这是一个很好...
基于HTMLParser的Web信息抽取系统的设计与实现,是一项旨在从网页中自动提取特定信息的技术方案。随着互联网信息的爆炸性增长,如何从海量数据中快速定位到有价值的信息成为了一个亟待解决的问题。传统的HTML页面...
### HTMLParser抽取Web网页正文信息的关键知识点 #### 一、HTMLParser简介与应用 HTMLParser是一种用于解析HTML文档的工具,特别适用于从Web网页中提取有用的信息。它能够有效地识别和解析HTML标签,帮助开发者从...
3. **解析HTML**:学习如何使用`HTMLParser`实例解析HTML字符串或从URL读取HTML内容。这通常涉及到创建`Parser`对象,然后调用`parse()`方法。 4. **遍历和访问HTML元素**:HTMLParser提供了对HTML文档节点的遍历...
HTMLParser.net是一个强大的.NET框架库,专为解析HTML文档...例如,如何创建一个解析器实例,如何使用CSS选择器选取元素,如何监听解析事件等。这些示例将帮助新手快速上手,同时对有经验的开发者也有一定的参考价值。
HTMLParser.jar 文件是一个Java库...总的来说,HTMLParser.jar是一个强大的Java HTML解析库,适用于需要处理HTML数据的场景,如爬虫、信息提取或者自动化测试。正确地导入和使用这个库,可以大大简化对HTML文档的操作。
以下是对HTMLParser及其在网页信息抽取中应用的详细说明: 1. **HTMLParser基本概念**: - HTMLParser是一个开源的Java库,它提供了API来解析HTML文档,支持处理HTML标签、属性、文本等元素。 - 库中的主要类包括...
- 在C#中,HTMLParser通常通过创建一个解析器实例,然后对HTML字符串或流进行操作。例如,你可以使用`HtmlDocument`类来加载HTML内容,并通过`SelectNodes`方法来查询特定的HTML元素。 - 在Java中,类似地,你可以...
在.NET环境中,开发者经常需要处理HTML数据,例如从网页抓取信息或者进行网页自动化。HTMLParser库提供了便捷的方式来解析复杂的HTML结构,提取所需的数据,而无需关心底层的DOM操作细节。 `htmlparser.dll`是这个...