`
shuaigg.babysky
  • 浏览: 566156 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用HtmlParser

阅读更多
import java.net.URL;

import junit.framework.TestCase;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.beans.LinkBean;
import org.htmlparser.beans.StringBean;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.TagNode;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.SimpleNodeIterator;
import org.htmlparser.visitors.NodeVisitor;
import org.htmlparser.visitors.ObjectFindingVisitor;

public class HtmlParserTest extends TestCase {
	//得到www.google.cn的页面源代码
	public  void  printHtmlString(String src) throws Exception {
		Parser parser = new Parser(src);
		//这样返回的list里面包含网页中的所有节点
		NodeList parse = parser.parse(null);
		System.out.println(parse.toHtml());
	}
	//使用TagNode的getAttribute("src")得到所有图片的路径 
	public  void findAllImgTagSrc(String src) throws Exception {
		Parser parser = new Parser(src);
		NodeFilter filter = new NodeClassFilter(ImageTag.class);
		NodeList list = parser.extractAllNodesThatMatch(filter);
		System.out.println("IMG tags number :" + list.size());
		SimpleNodeIterator iterator = list.elements();
		while(iterator.hasMoreNodes()) {
			//这个地方需要记住
			Node node = iterator.nextNode();
			TagNode tagNode = new TagNode();
			//一旦得到了TagNode , 就可以得到其中的属性值
			tagNode.setText(node.toHtml());
			System.out.println(tagNode.getAttribute("src"));
		}
	}
	//使用ImageTag的getURL得到所有的图片路径 
	public  void easyFildImagePath(String src) throws Exception {
		Parser parser = new Parser(src);
		NodeList list = parser.extractAllNodesThatMatch(new NodeClassFilter(ImageTag.class));
		for (int i = 0; i < list.size(); i++) {
			Node node = list.elementAt(i);
			ImageTag imgTag = new ImageTag();
			imgTag.setText(node.toHtml());
			System.out.println(imgTag.getAttribute("src"));
		}
	}
	//使用visitor模式得到所有图片路径
	public  void visitorModeFindImgSrc(String src) throws Exception {
		Parser parser = new Parser(src);
		NodeVisitor visitor = new NodeVisitor() {
			public void visitTag(Tag tag) {
				if(tag.getClass() == ImageTag.class) {
					System.out.println(tag.getAttribute("src"));
				}
			}

		};
		parser.visitAllNodesWith(visitor);
	}
	//Node可以传唤成它实际属于的类型
	public  void couldGetNodeWithItsType(String src) throws Exception {
		Parser parser = new Parser(src);
		NodeList nodes = parser.extractAllNodesThatMatch(new NodeClassFilter(ImageTag.class));
		for (int i = 0; i < nodes.size(); i++) {
			ImageTag tag = (ImageTag) nodes.elementAt(i);
			System.out.println(tag.getImageURL());
		}
	}
	//得到某个网页的纯文本
	public  void getPureTextOfSite(String src) {
		StringBean textBean = new StringBean();
		textBean.setURL(src);
		String pureText = textBean.getStrings();
		System.out.println(pureText);
	}
	//使用ObjectFindingVisitor得到所有的图片路径
	public  void testImageVisitor(String src) throws Exception {
		Parser parser  = new Parser(src);
		ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class);
		parser.visitAllNodesWith(visitor);
		Node[] tags = visitor.getTags();
		for (int i = 0; i < tags.length; i++) {
			ImageTag tag = (ImageTag) tags[i];
			System.out.println(tag.getImageURL());
		}
	}
	//使用TagNameFilter得到所有图片
	public  void getImgSrcWithTagNameFilter(String src) throws Exception {
		Parser parser = new Parser(src);
		NodeFilter filter = new TagNameFilter("IMG");
		NodeList list = parser.extractAllNodesThatMatch(filter);
		for (int i = 0; i < list.size(); i++) {
			ImageTag tag = (ImageTag) list.elementAt(i);
			System.out.println(tag.getImageURL());
		}
	}
	//从指定字符串解析html
	public  void parseHtmlWithString() throws Exception {
		Parser parser = new Parser();
		StringBuilder sb = new StringBuilder();
		sb.append("<html>");
		sb.append("<head>");
		sb.append("</head>");
		sb.append("<body>");
		sb.append("<img src='1.jpg' />");
		sb.append("<img src='2.jpg' />");
		sb.append("<img src='3.jpg' />");
		sb.append("</body>");
		sb.append("</html>");
		parser.setInputHTML(sb.toString());
		NodeList list = parser.extractAllNodesThatMatch(new NodeClassFilter(ImageTag.class));
		for (int i = 0; i < list.size(); i++) {
			ImageTag imgTag = (ImageTag) list.elementAt(i);
			System.out.println(imgTag.getImageURL());
		}
	}
	//使用或者策略的Filter
	public  void OrFilterTest(String src) throws Exception {
		Parser parser = new Parser(src);
		OrFilter orFilter = new OrFilter(new NodeClassFilter(ImageTag.class) , new NodeClassFilter(LinkTag.class));
		NodeList list = parser.extractAllNodesThatMatch(orFilter);
		for (int i = 0; i < list.size(); i++) {
			Node node = list.elementAt(i);
			if(node instanceof ImageTag) {
				ImageTag imgTag = (ImageTag)node;
				System.out.println("image : " + imgTag.getImageURL());
			}
			if(node instanceof LinkTag) {
				LinkTag linkTag = (LinkTag)node;
				System.out.println("link : " + linkTag.getLink());
			}
		}
	}
	//读取表格内容
	public  void readTableContent() throws Exception {
		Parser parser = new Parser();
		StringBuilder sb = new StringBuilder();
		sb.append("<html>");
		sb.append("<body>");
		sb.append("<table>");
		sb.append("<tr>");
		sb.append("<td>1</td>");
		sb.append("<td>2</td>");
		sb.append("<td>3</td>");
		sb.append("</tr>");
		sb.append("<tr>");
		sb.append("<td>One</td>");
		sb.append("<td>Two</td>");
		sb.append("<td>Three</td>");
		sb.append("</tr>");
		sb.append("</table>");
		sb.append("</body>");
		sb.append("</html>");
		parser.setInputHTML(sb.toString());
		NodeFilter filter = new NodeClassFilter(TableTag.class);
		NodeList list = parser.extractAllNodesThatMatch(filter);
		for (int i = 0; i < list.size(); i++) {
			TableTag table = (TableTag) list.elementAt(i);
			for(int j = 0 ; j < table.getRowCount(); j++) {
				TableRow row = table.getRow(j);
				TableColumn[] columns = row.getColumns();
				for (int k = 0; k < columns.length; k++) {
					System.out.println(columns[k].toPlainTextString());
				}
			}
		}
	}
	//LinkBean类使用
	public  void LinkBeanTest(String src) throws Exception {
		LinkBean linkBean = new LinkBean();
		linkBean.setURL(src);
		URL[] links = linkBean.getLinks();
		for (int i = 0; i < links.length; i++) {
			System.out.println(links[i]);
		}
	}
}

 

分享到:
评论

相关推荐

    Java使用HtmlParser实现简单的网络爬虫

    以下是如何使用HtmlParser实现网络爬虫的关键知识点: 1. **HtmlParser库**:HtmlParser是一个强大的HTML解析器,它能够解析HTML文档,将其转换为一个可操作的节点树,方便开发者通过节点过滤和遍历来获取目标信息...

    Java使用HtmlParser实现简单的网络爬虫.zip

    Java使用HtmlParser实现简单的网络爬虫是一种常见的技术实践,它涉及到网络编程、HTML解析和数据提取等核心概念。本文将详细讲解如何运用Java语言结合HtmlParser库来构建一个基础的网络爬虫,以便从网页中获取所需...

    javajsp中使用HTMLParser

    在JSP中使用HTMLParser,通常的步骤如下: 1. **导入依赖**:首先,你需要在项目中引入HTMLParser的库,可以通过Maven或Gradle添加对应的依赖。 2. **创建解析器**:创建`SAXHTMLParser`或`TagSoupParser`对象,前者...

    c#使用HtmlParser建立文档树 DomTree

    在本教程中,我们将深入探讨如何使用HtmlParser库来实现这一目标。 首先,我们需要了解什么是HtmlParser。HtmlParser是.NET生态系统中一个高效的HTML解析器,它可以解析HTML字符串或流,并将其转换为易于操作的对象...

    使用htmlparser制作的网页爬虫例题

    使用htmlparser制作的网页爬虫例题

    使用HTMLPARSER和HTTPCLIENT制作网络爬虫,附赠相关技术文档。

    使用HTMLPARSER和HTTPCLIENT制作网络爬虫的基本步骤如下: 1. **初始化HTTPCLIENT**:创建一个HttpClient实例,并配置好连接超时、重试策略等参数。 2. **构造HTTP请求**:根据需要,使用HttpGet或HttpPost对象构造...

    使用HTMLParser解析网页,找出文章后下载保存

    本篇文章将深入探讨如何使用HTMLParser库来解析网页,查找文章内容,并将其下载保存。HTMLParser是Python标准库中的一个模块,专门用于解析HTML和XML文档。 首先,我们需要了解HTMLParser的基本用法。HTMLParser是...

    使用HtmlParser 提取百度贴吧中的图片

    使用HtmlParser 提取百度贴吧中的图片

    HTMLParser 使用举例

    HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...

    HTMLParser.net源代码HTMLParser.net使用demo

    本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...

    java使用htmlparser提取网页纯文本例子

    【Java使用HTMLParser提取网页纯文本】\n\n在Java编程中,提取网页纯文本是一项常见的任务,尤其在数据抓取、信息分析等领域。HTMLParser是一个强大的Java库,专门用于解析HTML文档,提取其中的文本内容。下面我们将...

    HTMLParser 使用文档、jar包、以及源码

    1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...

    htmlparser.jar文件

    在实际使用HTMLParser时,首先需要在项目中引入这些jar包,然后可以通过创建Parser对象来解析HTML字符串或者文件。例如: ```java import org.htmlparser.Parser; import org.htmlparser.util.ParserException; ...

    C# HtmlParser使用小实例

    通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm`帮助文档是宝贵的参考资料,包含了详细的API说明和技术细节。记住,理解并熟练...

    c#版htmlparser htmlparser.dll htmlparser源代码

    `htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...

    HtmlParser

    使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...

Global site tag (gtag.js) - Google Analytics