htmlparser使用例子(全) 转载

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.}

时间: 2024-10-27 06:15:31

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

ANDROID内存优化(大汇总&mdash;&mdash;全)(转载)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在ANDROID开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). OOM: 内存泄露可以引发很多的问题:

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

Nuclear’Atk 整理的: 上传漏洞拿shell: 1.直接上传asp.asa.jsp.cer.php.aspx.htr.cdx….之类的马,拿到shell.2.就是在上传时在后缀后面加空格或者加几点,也许也会有惊奇的发现.例:*.asp ,*.asp...3.利用双重扩展名上传例如:*.jpg.asa格式(也可以配上第二点一起利用).4.gif文件头欺骗5.同名重复上传也很OK.: 入侵渗透中用到的命令,语法: set,systeminfo,ipconfig,ping,利用这些命令可以收

[全+转载] solaris 网络配置

1 网络设置 通过DHCP方式动态获取IP和netmask ifconfig e1000g0 auto-dhcp ifconfig e1000g0 dhcp start | drop | status 临时修改网卡IP和子网掩码设置: ifconfig e1000g1 inet 192.168.56.103 netmask 255.255.255.0 加载物理网卡: ifconfig e1000g1 plumb | unplumb 启动.关闭网卡: ifconfig e1000g1 up | d

Java 8 forEach简单例子(转载)

forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put("A", 10); items.put("B", 20); items.put("C", 30); items.put("D", 40); items.put("E", 50); items.put("

杨辉三角_二维数组的好例子(转载)

package com.test;import java.util.Scanner;public class Test {    public static void main(String[] args)// 创建一个对象用来调用,实现控制台输入输出,因为输入的是字符,所以a.show调用对象的时候强调转换一下.    {        YangHui a = new YangHui();        Scanner s = new Scanner(System.in);        Sy

GC日志格式及分析、heapdump文件获取

==仅方便后续参考== GC日志配置 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:servers/%SERVER_NAME%_gc.log -XX:+HeapDumpOnOutOfMemoryError注意,%SERVER_NAME%是win格式,linux下为${SERVER_NAME}. JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出简单GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:

通过onWindowAttributesChanged和onSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏

最近添加系统功能需要监听状态栏的隐藏与显示,小小研究了下结合资料做下总结: 首先我用这个WindowAttributesChanged方法来监听视频播放页面状态栏的隐藏与显示,通过打印getWindow().getAttributes().flags,获取页面属性,从而来判断状态栏的显示与隐藏,可正常监听! @Override public void onWindowAttributesChanged(LayoutParams params) { super.onWindowAttributes

WPF之Binding【转】

WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢,还是想显示数据. 就先来数据,数据可以从数据库里得到,可是如何显示出来呢? 本文的主角出来了:(以下内容全转载他人,具体 原文见上面的链接) ==================================== 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.

ApplicationCommands用于表示应用程序程序员经常遇到的常见命令,类似于ctrl+c

在WPF中,许多控件都自动集成了固有的命令集.比如文本框TextBox就提供了复制(Copy),粘贴(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等. WPF提供常用应用程序所用的命令集,常用的命令集包括:ApplicationCommands, ComponentCommands, NavigationCommands, MediaCommands和EditingCommands. ApplicationCommands(应用程序命令):  CancelPrint:取消