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 T extends TestCase {
private static final Logger logger = Logger.getLogger(T.class);
public T(String name) {
super(name);
}
/*
* 测试ObjectFindVisitor的用法
*/
public void testImageVisitor() {
try {
ImageTag imgLink;
ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class);
Parser parser = new Parser();
parser.setURL("http://www.google.com");
parser.setEncoding(parser.getEncoding());
parser.visitAllNodesWith(visitor);
Node[] nodes = visitor.getTags();
for (int i = 0; i < nodes.length; i++) {
imgLink = (ImageTag) nodes[i];
logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL());
logger.fatal("testImageVisitor() ImageLocation = " + imgLink.extractImageLocn());
logger.fatal("testImageVisitor() SRC = " + imgLink.getAttribute("SRC"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 测试TagNameFilter用法
*/
public void testNodeFilter() {
try {
NodeFilter filter = new TagNameFilter("IMG");
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++) {
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://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();
}
}
/*
* 测试<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());
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);
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://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();
}
}
/*
* 测试对指定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 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://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);
}
}
}
分享到:
相关推荐
本文将通过一个具体的例子来详细介绍如何在Java中使用`HtmlParser`库进行HTML文档的解析。 #### 示例背景 假设我们正在开发一款Android应用,该应用需要从HTML文件中提取特定的数据。这里我们将使用`HtmlParser`库...
1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...
在本例中,我们将深入探讨如何使用HTMLParser库解析HTML页面,提取所需信息。 首先,我们需要导入Python的`HTMLParser`模块。在Python 3中,这个模块已经被重命名为`html.parser`,因此应该导入`html.parser`,而...
在本场景中,我们讨论如何使用HTMLParser库来创建一个基础的网络爬虫,以便从网页上抓取和分析数据。 首先,我们需要了解HTMLParser的基本用法。HTMLParser设计为易于使用,它提供了对HTML元素、属性和文本的访问,...
6. **示例代码**:描述中提到的"自己写了一个小例子",这通常是演示如何使用HTMLParser库的代码,包含了如何实例化解析器、加载HTML、选择元素、提取数据等基本操作。通过分析这个demo,我们可以快速上手使用这个库...
在这个例子中,我们首先创建了一个`Parser`实例,然后使用`elements()`方法获取一个节点迭代器。通过迭代器,我们可以遍历HTML文档中的所有节点,并检查它们是否是`<a>`标签。如果是,我们就获取并打印出`href`属性...
在这个压缩包中,包含了HTMLParser的核心程序包、示例代码以及使用指南,这对于理解和应用这个库非常有帮助。 HTMLParser的设计目标是能够处理不规则的HTML,因为实际网页往往不会严格按照HTML标准编写。它允许...
这个例子展示了如何使用HTMLParser找到网页中的所有链接。 五、常见应用场景 - 数据抓取:从网页中提取特定信息,如价格、评论、文章等。 - HTML清理:将不规范的HTML转换为标准格式。 - 内容过滤:移除广告、脚本...
在JSP中使用HTMLParser,通常的步骤如下: 1. **导入依赖**:首先,你需要在项目中引入HTMLParser的库,可以通过Maven或Gradle添加对应的依赖。 2. **创建解析器**:创建`SAXHTMLParser`或`TagSoupParser`对象,前者...
接下来,我们创建一个简单的示例来演示如何使用HtmlParser。以下代码展示了如何读取一个HTML文件并打印所有的段落(`<p>`标签)内容: ```java import net.htmlparser.jericho.*; public class HtmlParserExample ...
以下是一个简单的示例,展示了如何使用HTMLParser抓取网页的标题: ```java import org.htmlparser.Parser; import org.htmlparser.util.NodeIterator; import org.htmlparser.util.ParserException; import org....
在使用node-htmlparser之前,我们需要先将其安装到项目中。这通常通过npm(Node.js包管理器)来完成。在命令行中输入以下命令: ```bash npm install node-htmlparser ``` 一旦安装完毕,我们就可以在代码中导入并...
然后,使用HTMLParser解析这个内容,查找包含基金数据的表格标签(如`<table>`),进一步找到表头(`<th>`)和数据单元格(`<td>`)。通过分析表格结构,可以提取出每行数据,并将其转换为"FundTableBean"实例。 在...
【Java使用HTMLParser提取网页纯文本】\n\n在Java编程中,提取网页纯文本是一项常见的任务,尤其在数据抓取、信息分析等领域。HTMLParser是一个强大的Java库,专门用于解析HTML文档,提取其中的文本内容。下面我们将...
本教程将通过实例来讲解如何使用HTMLParser从网页上抓取数据,并简要提及Java解析XML的方法。 首先,我们需要了解HTMLParser的基本工作原理。HTMLParser遵循事件驱动的模型,它会逐行读取HTML源代码,遇到特定的...
以下是一个简单的例子,展示如何使用 HtmlParser 获取所有链接: ```java Parser parser = new Parser(htmlContent); NodeFilter linkFilter = new TagNameFilter("a"); NodeList links = parser....
HTMLParser是一个专为Java开发的库,用于解析HTML文档,尤其适合在没有其他外部依赖的情况下进行HTML内容的处理和...通过阅读源码、文档以及使用提供的例子,开发者可以充分利用这个库来解决各种与HTML处理相关的问题。
本文将详细讲解如何使用Java的htmlparser库实现网页抓取,并探讨其核心概念和用法。 首先,从给定的代码示例中可以看出,这是一个简单的Java程序,用于从指定的URL抓取HTML内容并将其保存到本地文件。这个程序的...
总的来说,这个资料集合提供了全方位的HTMLParser学习资源,涵盖了从基础API到实战案例的各个方面,对于想要学习和掌握HTMLParser的人来说,是一份非常宝贵的学习材料。通过深入学习和实践,你可以利用HTMLParser...
例如,以下是一个简单的使用HTMLParser解析HTML并提取所有链接的例子: ```java import org.htmlparser.Parser; import org.htmlparser.util.NodeList; import org.htmlparser.util.NodeIterator; public class ...