1.import java.net.URL; 
2. 
3.import junit.framework.TestCase; 
4. 
5.import org.apache.log4j.Logger; 
6.import org.htmlparser.Node; 
7.import org.htmlparser.NodeFilter; 
8.import org.htmlparser.Parser; 
9.import org.htmlparser.Tag; 
10.import org.htmlparser.beans.LinkBean; 
11.import org.htmlparser.filters.NodeClassFilter; 
12.import org.htmlparser.filters.OrFilter; 
13.import org.htmlparser.filters.TagNameFilter; 
14.import org.htmlparser.tags.HeadTag; 
15.import org.htmlparser.tags.ImageTag; 
16.import org.htmlparser.tags.InputTag; 
17.import org.htmlparser.tags.LinkTag; 
18.import org.htmlparser.tags.OptionTag; 
19.import org.htmlparser.tags.SelectTag; 
20.import org.htmlparser.tags.TableColumn; 
21.import org.htmlparser.tags.TableRow; 
22.import org.htmlparser.tags.TableTag; 
23.import org.htmlparser.tags.TitleTag; 
24.import org.htmlparser.util.NodeIterator; 
25.import org.htmlparser.util.NodeList; 
26.import org.htmlparser.util.ParserException; 
27.import org.htmlparser.visitors.HtmlPage; 
28.import org.htmlparser.visitors.NodeVisitor; 
29.import org.htmlparser.visitors.ObjectFindingVisitor; 
30. 
31.public class T extends TestCase { 
32. 
33.  private static final Logger logger = Logger.getLogger(T.class); 
34. 
35.  public T(String name) { 
36.    super(name); 
37.  } 
38. 
39.  /*
40.   * 测试ObjectFindVisitor的用法
41.   */ 
42.  public void testImageVisitor() { 
43.    try
44.      ImageTag imgLink; 
45.      ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class); 
46.      Parser parser = new Parser(); 
47.      parser.setURL("http://www.google.com"); 
48.      parser.setEncoding(parser.getEncoding()); 
49.      parser.visitAllNodesWith(visitor); 
50.      Node[] nodes = visitor.getTags(); 
51.      for (int i = 0; i < nodes.length; i++) { 
52.        imgLink = (ImageTag) nodes[i]; 
53.        logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL()); 
54.        logger.fatal("testImageVisitor() ImageLocation = " + imgLink.extractImageLocn()); 
55.        logger.fatal("testImageVisitor() SRC = " + imgLink.getAttribute("SRC")); 
56.      } 
57.    } catch (Exception e) { 
58.      e.printStackTrace(); 
59.    } 
60.  } 
61. 
62.  /*
63.   * 测试TagNameFilter用法
64.   */ 
65.  public void testNodeFilter() { 
66.    try
67.      NodeFilter filter = new TagNameFilter("IMG"); 
68.      Parser parser = new Parser(); 
69.      parser.setURL("http://www.google.com"); 
70.      parser.setEncoding(parser.getEncoding()); 
71.      NodeList list = parser.extractAllNodesThatMatch(filter); 
72.      for (int i = 0; i < list.size(); i++) { 
73.        logger.fatal("testNodeFilter() " + list.elementAt(i).toHtml()); 
74.      } 
75.    } catch (Exception e) { 
76.      e.printStackTrace(); 
77.    } 
78. 
79.  } 
80. 
81.  /*
82.   * 测试NodeClassFilter用法
83.   */ 
84.  public void testLinkTag() { 
85.    try
86. 
87.      NodeFilter filter = new NodeClassFilter(LinkTag.class); 
88.      Parser parser = new Parser(); 
89.      parser.setURL("http://www.google.com"); 
90.      parser.setEncoding(parser.getEncoding()); 
91.      NodeList list = parser.extractAllNodesThatMatch(filter); 
92.      for (int i = 0; i < list.size(); i++) { 
93.        LinkTag node = (LinkTag) list.elementAt(i); 
94.        logger.fatal("testLinkTag() Link is :" + node.extractLink()); 
95.      } 
96.    } catch (Exception e) { 
97.      e.printStackTrace(); 
98.    } 
99. 
100.  } 
101. 
102.  /*
103.   * 测试<link href=" text=’text/css’ rel=’stylesheet’ />用法
104.   */ 
105.  public void testLinkCSS() { 
106.    try
107. 
108.      Parser parser = new Parser(); 
109.      parser.setInputHTML("<head><title>Link Test</title>" 
110.          + "<link href=’/test01/css.css' text='text/css' rel='stylesheet' />" 
111.          + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>" 
112.          + "<body>"); 
113.      parser.setEncoding(parser.getEncoding()); 
114. 
115.      for (NodeIterator e = parser.elements(); e.hasMoreNodes();) { 
116.        Node node = e.nextNode(); 
117.        logger.fatal("testLinkCSS()" + node.getText() + node.getClass()); 
118. 
119.      } 
120.    } catch (Exception e) { 
121.      e.printStackTrace(); 
122.    } 
123.  } 
124. 
125.  /*
126.   * 测试OrFilter的用法
127.   */ 
128.  public void testOrFilter() { 
129.    NodeFilter inputFilter = new NodeClassFilter(InputTag.class); 
130.    NodeFilter selectFilter = new NodeClassFilter(SelectTag.class); 
131. 
132.    NodeList nodeList = null; 
133. 
134.    try
135.      Parser parser = new Parser(); 
136.      parser 
137.          .setInputHTML("<head><title>OrFilter Test</title>" 
138.              + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />" 
139.              + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" 
140.              + "</head>" 
141.              + "<body>" 
142.              + "<input type='text' value='text1′ name='text1′/>" 
143.              + "<input type='text' value='text2′ name='text2′/>" 
144.              + "<select><option id='1′>1</option><option id='2′>2</option><option id='3′></option></select>" 
145.              + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>"); 
146. 
147.      parser.setEncoding(parser.getEncoding()); 
148.      OrFilter lastFilter = new OrFilter(); 
149.      lastFilter.setPredicates(new NodeFilter[] { selectFilter, inputFilter }); 
150.      nodeList = parser.parse(lastFilter); 
151.      for (int i = 0; i <= nodeList.size(); i++) { 
152.        if (nodeList.elementAt(i) instanceof InputTag) { 
153.          InputTag tag = (InputTag) nodeList.elementAt(i); 
154.          logger.fatal("OrFilter tag name is :" + tag.getTagName() + " ,tag value is:" 
155.              + tag.getAttribute("value")); 
156.        } 
157.        if (nodeList.elementAt(i) instanceof SelectTag) { 
158.          SelectTag tag = (SelectTag) nodeList.elementAt(i); 
159.          NodeList list = tag.getChildren(); 
160. 
161.          for (int j = 0; j < list.size(); j++) { 
162.            OptionTag option = (OptionTag) list.elementAt(j); 
163.            logger.fatal("OrFilter Option" + option.getOptionText()); 
164.          } 
165. 
166.        } 
167.      } 
168. 
169.    } catch (ParserException e) { 
170.      e.printStackTrace(); 
171.    } 
172.  } 
173. 
174.  /*
175.   * 测试对<table><tr><td></td></tr></table>的解析
176.   */ 
177.  public void testTable() { 
178.    Parser myParser; 
179.    NodeList nodeList = null; 
180.    myParser = Parser.createParser("<body> " + "<table id='table1′ >" 
181.        + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" 
182.        + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" 
183.        + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >" 
184.        + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" 
185.        + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" 
186.        + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>", "GBK"); 
187.    NodeFilter tableFilter = new NodeClassFilter(TableTag.class); 
188.    OrFilter lastFilter = new OrFilter(); 
189.    lastFilter.setPredicates(new NodeFilter[] { tableFilter }); 
190.    try
191.      nodeList = myParser.parse(lastFilter); 
192.      for (int i = 0; i <= nodeList.size(); i++) { 
193.        if (nodeList.elementAt(i) instanceof TableTag) { 
194.          TableTag tag = (TableTag) nodeList.elementAt(i); 
195.          TableRow[] rows = tag.getRows(); 
196. 
197.          for (int j = 0; j < rows.length; j++) { 
198.            TableRow tr = (TableRow) rows[j]; 
199.            TableColumn[] td = tr.getColumns(); 
200.            for (int k = 0; k < td.length; k++) { 
201.              logger.fatal("<td>" + td[k].toPlainTextString()); 
202.            } 
203. 
204.          } 
205. 
206.        } 
207.      } 
208. 
209.    } catch (ParserException e) { 
210.      e.printStackTrace(); 
211.    } 
212.  } 
213. 
214.  /*
215.   * 测试NodeVisitor的用法,遍历所有节点
216.   */ 
217.  public void testVisitorAll() { 
218.    try
219.      Parser parser = new Parser(); 
220.      parser.setURL("http://www.google.com"); 
221.      parser.setEncoding(parser.getEncoding()); 
222.      NodeVisitor visitor = new NodeVisitor() { 
223.        public void visitTag(Tag tag) { 
224.          logger.fatal("testVisitorAll()  Tag name is :" + tag.getTagName() + " \n Class is :" 
225.              + tag.getClass()); 
226.        } 
227. 
228.      }; 
229. 
230.      parser.visitAllNodesWith(visitor); 
231.    } catch (ParserException e) { 
232.      e.printStackTrace(); 
233.    } 
234.  } 
235. 
236.  /*
237.   * 测试对指定Tag的NodeVisitor的用法
238.   */ 
239.  public void testTagVisitor() { 
240.    try
241. 
242.      Parser parser = new Parser("<head><title>dddd</title>" 
243.          + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />" 
244.          + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>" 
245.          + "<body>" + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>"); 
246.      NodeVisitor visitor = new NodeVisitor() { 
247.        public void visitTag(Tag tag) { 
248.          if (tag instanceof HeadTag) { 
249.            logger.fatal("visitTag() HeadTag : Tag name is :" + tag.getTagName() 
250.                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()); 
251.          } else if (tag instanceof TitleTag) { 
252.            logger.fatal("visitTag() TitleTag : Tag name is :" + tag.getTagName() 
253.                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()); 
254. 
255.          } else if (tag instanceof LinkTag) { 
256.            logger.fatal("visitTag() LinkTag : Tag name is :" + tag.getTagName() 
257.                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText() 
258.                + " \n getAttribute is :" + tag.getAttribute("href")); 
259.          } else
260.            logger.fatal("visitTag() : Tag name is :" + tag.getTagName() + " \n Class is :" 
261.                + tag.getClass() + "\n Text is :" + tag.getText()); 
262.          } 
263. 
264.        } 
265. 
266.      }; 
267. 
268.      parser.visitAllNodesWith(visitor); 
269.    } catch (Exception e) { 
270.      e.printStackTrace(); 
271.    } 
272.  } 
273. 
274.  /*
275.   * 测试HtmlPage的用法
276.   */ 
277.  public void testHtmlPage() { 
278.    String inputHTML = "<html>" + "<head>" 
279.        + "<title>Welcome to the HTMLParser website</title>" + "</head>" + "<body>" 
280.        + "Welcome to HTMLParser" + "<table id='table1′ >" 
281.        + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" 
282.        + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" 
283.        + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >" 
284.        + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" 
285.        + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" 
286.        + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>" + "</html>"
287.    Parser parser = new Parser(); 
288.    try
289. 
290.      parser.setInputHTML(inputHTML); 
291.      parser.setEncoding(parser.getURL()); 
292.      HtmlPage page = new HtmlPage(parser); 
293.      parser.visitAllNodesWith(page); 
294.      logger.fatal("testHtmlPage -title is :" + page.getTitle()); 
295.      NodeList list = page.getBody(); 
296. 
297.      for (NodeIterator iterator = list.elements(); iterator.hasMoreNodes();) { 
298.        Node node = iterator.nextNode(); 
299.        logger.fatal("testHtmlPage -node  is :" + node.toHtml()); 
300.      } 
301. 
302.    } catch (ParserException e) { 
303.      // TODO Auto-generated catch block 
304.      e.printStackTrace(); 
305.    } 
306.  } 
307. 
308.  /*
309.   * 测试LinkBean的用法
310.   */ 
311.  public void testLinkBean() { 
312.    Parser parser = new Parser(); 
313. 
314.    LinkBean linkBean = new LinkBean(); 
315.    linkBean.setURL("http://www.google.com"); 
316.    URL[] urls = linkBean.getLinks(); 
317. 
318.    for (int i = 0; i < urls.length; i++) { 
319.      URL url = urls[i]; 
320.      logger.fatal("testLinkBean() -url  is :" + url); 
321.    } 
322. 
323.  } 
324. 
325.}

htmlparser使用例子(全) 转载的更多相关文章

  1. Jquery小例子:全选按钮、加事件、挂事件;parent()语法;slideToggle()语法;animate()语法;元素的淡入淡出效果:fadeIn() 、fadeOut()、fadeToggle() 、fadeTo();function(e):e包括事件源和时间数据;append() 方法

    function(e): 事件包括事件源和事件数据,事件源是指是谁触发的这个事件,谁就是事件源(div,按钮,span都可以是事件源),时间数据是指比如点击鼠标的事件中,事件数据就是指点击鼠标的左建或 ...

  2. javacv 340使用 人脸检测例子【转载】

    Java下使用opencv进行人脸检测 工作需要,研究下人脸识别,发现opencv比较常用,尽管能检测人脸,但识别率不高,多数是用来获取摄像头的视频流的,提取里面的视频帧,实现人脸识别时通常会和其他框 ...

  3. Auth2.0 例子【转载】

    本文转载自:https://www.cnblogs.com/flashsun/p/7424071.html 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常简单的 ...

  4. c# 异步调用简单例子(转载)

    首先来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务 小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,将开水灌入热水瓶,然后继续整理家务 这也是日 ...

  5. WEB下渗透测试经验技巧(全)[转载]

    Nuclear’Atk 整理的: 上传漏洞拿shell: 1.直接上传asp.asa.jsp.cer.php.aspx.htr.cdx….之类的马,拿到shell.2.就是在上传时在后缀后面加空格或者 ...

  6. Java 8 forEach简单例子(转载)

    forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put( ...

  7. Py中pyplot之subplot例子【转载】

    转自:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html 1.有NaN的余弦图subplot import numpy ...

  8. [全+转载] solaris 网络配置

    ===================== 较为重要的几个文件: /etc/nodename                      主机名(即 hostname命令的输出) /etc/defaul ...

  9. PDF文档转PNG图片 c++(转载)

    PDF文档转PNG图片 c++,例子是转载的,忘记出处了.被我收集起来了. 链接:https://pan.baidu.com/s/1iuxDHibQnvx0UYJ5m25NAg 密码:5o0c

随机推荐

  1. 【HeadFirst设计模式】11.代理模式

    定义: 为另一个对象提供一个替身或占位符以访问这个对象. 远程代理 虚拟代理 保护代理.动态代理 其它: 远程代理的远程接口必须继承记号接口Remote 远程代理的使用过程中,要注意序列化的问题, 远 ...

  2. 在LaTeX中利用preview宏包和tikz宏包生成单图pdf

    有时候我们利用tikz宏包画出的图片后,只想生成一个单图pdf,而且pdf的页面大小与图片相同,以便于以后再次用latex插入. 可以与preview宏包进行搭配,页面大小由图像大小决定,可以通过改变 ...

  3. 关于NPC和NP-Hard问题

    参考链接: 1. P.NP.NPC和NP-hard问题的理解 参考:<算法导论>

  4. 摘自淘宝的js地区组件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. slqplus 帮助手册

    1.查看sqlplus的帮助是否可用,必须登录了才可用. D:\app\product\\db_1\sqlplus\admin\help>sqlplus /nolog SQL :: Copyri ...

  6. HBASE的安装

    HBASE的安装: 安装的软件版本:hbase-0.98.4-hadoop2.tar.gz 下载链接:http://www.apache.org/dist/hbase/hbase-0.98.4/ 1. ...

  7. Java基础中的一些注意点(续)

    1.局部(local)变量是在一个方法内定义的变量, 也被称作自动(automatic).临时(temporary)或栈(stack)变量 -          当一个方法被执行时, 局部变量被创建: ...

  8. mysql将多张表COUNT的数据相加

    由于数据量过大,我们将根据用户id 将数据存储在不同的表中,根据用户id模10的余数作为表的后缀.有如下十张表:test_0, test_1, ... ,test_9现在需要根据某个条件查询统计数据我 ...

  9. HTML中的转义字符

    HTML常用符号: 显示一个空格    < 小于 < <> 大于 > >& &符号 & &" 双引号 " &qu ...

  10. [转载]WCF 几种常见错误

    WCF标准的配置文件为: <system.serviceModel>         <services>             <service name=" ...