`

由新水浒到htmlparser的一次运用

阅读更多

最近在看新水浒,被108好汉的英雄气概所折服了,这里面的些许台词不仅是当时人民生活的写照,和当今也类似之处。“我爸是李刚”是鲜活的小衙内的翻版,强人欺压百姓,官员相互勾结。。。。。,莫谈国事,哈哈。看了之后就是想把108个好汉的剧照给下载下来,后来找了一找,有一个网站收录了(可怜不全,只有五十四个)。问题来了,我可不想一个一个图片的下载,然后再去和名字一个一个对应。可能你也想到了,对,用程序解析这个网站的html,然后去下载图片,岂不很省力。以前接触过htmlparser,下面分享一下我是怎么做的啦。希望对你有帮助。

 

通过这个程序,我想你以后如果要下载很多琐碎的东西,如果还是一个个的去点击右键,另存为。。。那么你真得OUT了,哈哈

 

先简单介绍下htmparser.希望没用过的兄弟们有个了解。

htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html。它能超高速解析html,而且不会出错。可以说当前它是解析html文件最好的一个工具了,无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。

 

htmlparser基本功能
1.信息提取
 文本信息抽取,例如对HTML进行有效信息搜索
 链接提取,用于自动给页面的链接文本加上链接的标签
 资源提取,例如对一些图片、声音的资源的处理
 链接检查,用于检查HTML中的链接是否有效
 页面内容的监控
2.信息转换
 链接重写,用于修改页面中的所有超链接
 网页内容拷贝,用于将网页内容保存到本地
 内容检验,可以用来过滤网页上一些令人不愉快的字词
 HTML信息清洗,把本来乱七八糟的HTML信息格式化
 转成XML格式数据

  下面分享我的程序源代码,希望对你有参考作用。

   注:程序是用eclipise开发,最好把项目编码设置为utf-8

   下面附上htmlparser开发包和api。如果想要最新的jar,可以去官网下载。


  package test.video.htmlparser;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.util.NodeList;

public class ShuiHuInfo {
	private String  mainUrl="http://www.chachaba.com/";//这个是我想下载图片网站主页
	public static void main(String[] args) {
		ShuiHuInfo sh=new ShuiHuInfo();
		//下面分别对每一个页面进行下载,共三页,参数i是为了拼接url用的
		for(int i=3;i<=5;i++){
			sh.getImage(i);
		}
	}
	public void getImage(int i){
		String url=mainUrl+"news/html/yule/dianshi/20110815_32260_"
				   +i+".html";//拼接url,这个页面中有好汉的图片和名字
		//得到页面的html代码
		String content=getContent(url);	
		//paser就是用到的解析对象了
		Parser parser=new Parser();
		//可以通过查看html代码,发现每一个图片都有class=al-wrapper键值对,生成对应的过滤器
		HasAttributeFilter filter=new HasAttributeFilter("class","al-wrapper");
		try {
			//下面就是解析代码了
			parser.setInputHTML(content);
			NodeList list=parser.parse(filter);
			for(int j=0;j<list.size();j++){
				Node node=list.elementAt(j);
				NodeClassFilter f1=new NodeClassFilter(ImageTag.class);
				NodeList l=node.getChildren().extractAllNodesThatMatch(f1);
				ImageTag imagetag=null;
				if(l.size()>0)
					imagetag=(ImageTag)l.elementAt(0);;
				String imageUrl=mainUrl+imagetag.getImageURL();
				URLConnection imgcon=new URL(imageUrl).openConnection();
				InputStream in=imgcon.getInputStream(); 
				HasAttributeFilter f2=new HasAttributeFilter("class","desc");
				l=node.getChildren().extractAllNodesThatMatch(f2);
				Node n=null;
				if(l.size()>0)
					n=l.elementAt(0);
				String filename=new String(n.getFirstChild().getText().getBytes(),"utf-8");
				//System.out.println(filename);
				//将好汉的名字作为文件名字,并将图片的内容写入对应文件
				writeFile(filename,in);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void writeFile(String filename,InputStream in){
		File file=new File("img");
		if(!file.exists())
			file.mkdir();
		File image=new File(file,filename+".jpg");
		BufferedOutputStream writer=null;
		BufferedInputStream reader=null;
		try {
			writer=new BufferedOutputStream(new FileOutputStream(image));
			reader=new BufferedInputStream(in);
			int len=-1;
			byte []buf=new byte[1024];
			while((len=reader.read(buf))!=-1)
				writer.write(buf, 0, len);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				reader.close();
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public String getContent(String url){
		URL u=null;
		URLConnection con=null;
		InputStream in=null;
		BufferedReader reader=null;
		StringBuffer buffer=null;
		try {
			u = new URL(url);
			con=u.openConnection();
			in=con.getInputStream();
		    reader=	new BufferedReader(new InputStreamReader(in));
			buffer=new StringBuffer();
			String str=null;
			while((str=reader.readLine())!=null){
				buffer.append(str+"\n");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return buffer.toString();
	}
}
 

 


 

 

 

分享到:
评论

相关推荐

    htmlparser

    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

    htmlparser[1]是一个纯的java写的html(标准通用标记语言下的一个应用)解析的库,它不依赖于其它的java库文件,主要用于改造或 提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。 毫不...

    htmlparser1.6最新版

    HTMLParser是一个Java库,专为处理HTML文档而设计,它在网页信息提取和解析领域扮演着重要角色。本文将深入探讨HTMLParser 1.6版本的功能、用途、使用方法以及其在IT领域的应用。 HTMLParser的核心功能是解析HTML...

    htmlparser.jar文件

    HTMLParser提供了多种方法来访问和操作解析树,比如`parseContent()`用于获取整个文档的节点列表,`visitAllNodesWith()`可以遍历所有节点并应用自定义的访问器,`getFirstNodeWithTag()`用于找到第一个特定标签的...

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

    4. **事件驱动的解析**:HTMLParser.net提供了一个事件模型,当解析到特定元素或属性时,会触发事件。开发者可以订阅这些事件来实现自定义逻辑。 5. **灵活性**:除了基本的HTML解析,HTMLParser.net还支持XML和SVG...

    c#版htmlparser htmlparser.dll htmlparser源代码

    标签`c# htmlparser`表明这个库是为C#语言设计的,这意味着它可以无缝集成到任何.NET Framework或.NET Core项目中,利用C#的特性如 LINQ 来简化数据提取。 标签`dll`提醒我们这个库是以DLL形式提供的,这意味着它是...

    htmlparser库与教程

    1. **安装和引入HTMLParser**:首先,用户需要将htmlparser.jar添加到项目构建路径中,无论是通过IDE(如Eclipse或IntelliJ IDEA)还是通过构建工具(如Maven或Gradle)。 2. **基本概念**:理解HTMLParser的核心类...

    C# HTMLParser下载.rar

    在"C# HTMLParser下载.rar"压缩包中,包含了一个名为"HtmlParser2003"的文件,这很可能是该库的一个早期版本。 首先,我们来看一下HTMLParser的基本用法。HTMLParser通常会提供一个解析器类,通过这个类,我们可以...

    htmlparser网页分析

    HTMLParser是一款用Java编写的库,专门用于解析HTML文档。在网页分析中,HTMLParser扮演着核心角色,它能够帮助开发者有效地处理HTML源代码,提取所需的信息,甚至进行DOM(Document Object Model)操作。以下是对...

    htmlparser-1.2.1 jar

    htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载

    HtmlParser源码及demo

    8. **JAR文件**:`jar`文件可能是编译后的HTMLParser库,开发者可以直接引入到自己的项目中使用。 9. **编译与构建输出**:`.settings`目录存储了项目的特定构建设置,而`bin`目录通常包含由编译器生成的字节码文件...

    htmlParser.jar包

    在很多Web抓取、信息提取以及网页分析的项目中,HTMLParser都是一个理想的工具。 HTMLParser库的设计考虑了易用性和灵活性,它提供了丰富的API,允许开发者通过编程方式来访问和操作HTML文档的各个元素,如标签、...

    Winista.Htmlparser.Net 源码 +Demo

    `HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1. **AnalyzeHtml**:这个项目可能展示了如何分析HTML文档,通过调用HtmlParser的API来提取...

    HtmlParser 2.1 码源

    **HtmlParser 2.1 知识点详解** HtmlParser是一个强大的开源库,主要用于解析HTML文档,它在处理不规则的HTML结构时表现出了极高的灵活性和稳定性。这个"HtmlParser 2.1 码源"是该库的2015年6月的最新版本,包含了...

    HTMLParser 2.0最新jar API 源代码

    将此jar包添加到项目的类路径中,就可以在程序中使用HTMLParser提供的各种解析功能了。 HTMLParser库的核心功能包括: - **HTML解析**:库能够解析HTML文档,并将其转化为一个可操作的结构,比如树形结构。这使得...

    htmlparser的jar包

    HTMLParser是一个Java库,用于解析HTML文档。这个库在处理非结构化或不规范的HTML时特别有用,因为网页在实际环境中往往不严格按照HTML标准编写。HTMLParser提供了两种主要的解析方式:事件驱动和DOM(Document ...

    HtmlParser c#源码+demo

    7. **自定义扩展**:拥有源码意味着我们可以根据需求对HTMLParser进行扩展,添加新的功能,比如增加新的选择器支持,优化性能,或者增强错误处理能力。 8. **集成测试**:虽然没有明确提及,但是一个成熟的库往往会...

Global site tag (gtag.js) - Google Analytics